Share via


Python-környezet biztonságos kezelése az Azure HDInsightban szkriptműveletekkel

A HDInsight két beépített Python-telepítéssel rendelkezik a Spark-fürtben: ezek az Anaconda Python 2.7 és a Python 3.5. Előfordulhat, hogy az ügyfeleknek testre kell szabni a Python-környezetet, például külső Python-csomagokat kell telepíteni. Itt bemutatjuk az Apache Spark-fürtök Python-környezeteinek biztonságos kezelésére vonatkozó ajánlott eljárásokat a HDInsighton.

Előfeltételek

Apache Spark-fürt megléte a HDInsightban. További útmutatásért lásd: Apache Spark-fürt létrehozása az Azure HDInsightban. Ha még nem rendelkezik Spark-fürttel a HDInsighton, szkriptműveleteket futtathat a fürt létrehozása során. Tekintse meg az egyéni szkriptműveletek használatáról szóló dokumentációt.

HDInsight-fürtökön használt nyílt forráskódú szoftverek támogatása

A Microsoft Azure HDInsight szolgáltatás az Apache Hadoop körül létrehozott nyílt forráskódú technológiák környezetét használja. A Microsoft Azure általános támogatást nyújt a nyílt forráskódú technológiákhoz. További információkért tekintse meg az Azure támogatási gyik webhelyét. A HDInsight szolgáltatás további szintű támogatást nyújt a beépített összetevőkhöz.

A HDInsight szolgáltatásban kétféle nyílt forráskódú összetevő érhető el:

Összetevő Leírás
Beépítve Ezek az összetevők előre telepítve vannak a HDInsight-fürtökön, és biztosítják a fürt alapvető funkcióit. Ebbe a kategóriába tartozik például az Apache Hadoop YARN Resource Manager, az Apache Hive lekérdezési nyelv (HiveQL) és a Mahout-kódtár. A fürtösszetevők teljes listája elérhető a HDInsight által biztosított Apache Hadoop-fürtverziók újdonságai között.
Egyéni Ön, mint a fürt felhasználója, telepítheti vagy használhatja a számítási feladatban a közösségben elérhető vagy Ön által létrehozott összetevőket.

Fontos

A HDInsight-fürthöz biztosított összetevők teljes mértékben támogatottak. Microsoft ügyfélszolgálata segít elkülöníteni és megoldani az összetevőkkel kapcsolatos problémákat.

Az egyéni összetevők kereskedelmi szempontból ésszerű támogatást kapnak a probléma további megoldásához. Előfordulhat, hogy a Microsoft ügyfélszolgálata meg tudja oldani a problémát, vagy arra kérhetik Önt, hogy vegye fel a kapcsolatot az nyílt forráskód technológiák elérhető csatornáival, ahol a technológia terén mély szakértelem található. Például számos közösségi webhely használható, például: Microsoft Q&A kérdésoldal a HDInsighthoz, https://stackoverflow.com. Az Apache-projektekben projektwebhelyek https://apache.orgis találhatók.

A Python alapértelmezett telepítésének ismertetése

A HDInsight Spark-fürtöken telepítve van az Anaconda. A fürtben két Python-telepítés található, az Anaconda Python 2.7 és a Python 3.5. Az alábbi táblázat a Spark, Livy és Jupyter alapértelmezett Python-beállításait mutatja be.

Beállítás Python 2.7 Python 3.5
Elérési út /usr/bin/anaconda/bin /usr/bin/anaconda/envs/py35/bin
Szikra változat Alapértelmezett beállítás: 2.7 A konfiguráció 3.5-ösre módosítható
Livy-verzió Alapértelmezett beállítás: 2.7 A konfiguráció 3.5-ösre módosítható
Jupyter PySpark kernel PySpark3 kernel

A Spark 3.1.2-es verziójához az Apache PySpark kernel el lesz távolítva, és egy új Python 3.8-környezet van telepítve a PySpark3 kernel által használt alatt /usr/bin/miniforge/envs/py38/bin. A PYSPARK_PYTHON környezeti és PYSPARK3_PYTHON a környezeti változók a következőkkel frissülnek:

export PYSPARK_PYTHON=${PYSPARK_PYTHON:-/usr/bin/miniforge/envs/py38/bin/python}
export PYSPARK3_PYTHON=${PYSPARK_PYTHON:-/usr/bin/miniforge/envs/py38/bin/python}

Külső Python-csomagok biztonságos telepítése

A HDInsight-fürt a beépített Python-környezettől függ, mind a Python 2.7-ről, mind a Python 3.5-ről. Az egyéni csomagok közvetlen telepítése ezekben az alapértelmezett beépített környezetekben váratlan kódtár-verzióváltozásokat okozhat. És bontsa tovább a fürtöt. Ha egyéni külső Python-csomagokat szeretne biztonságosan telepíteni a Spark-alkalmazásokhoz, kövesse a lépéseket.

  1. Python virtuális környezet létrehozása a Conda használatával. A virtuális környezet izolált helyet biztosít a projektek számára anélkül, hogy másokat is feltörnél. A Python virtuális környezet létrehozásakor megadhatja a használni kívánt Python-verziót. Még mindig létre kell hoznia virtuális környezetet, annak ellenére, hogy a Python 2.7-et és a 3.5-öt szeretné használni. Ennek a követelménynek az a célja, hogy a fürt alapértelmezett környezete ne legyen hibás. Szkriptműveleteket futtathat a fürtön az összes csomóponton a következő szkripttel egy Python virtuális környezet létrehozásához.

    • --prefix egy elérési utat határoz meg, ahol egy conda virtuális környezet él. Több konfigurációt is módosítani kell az itt megadott elérési út alapján. Ebben a példában a py35new nevet használjuk, mivel a fürt már rendelkezik egy py35 nevű virtuális környezettel.
    • python= A virtuális környezet Python-verzióját adja meg. Ebben a példában a 3.5-ös verziót használjuk, ugyanazzal a verzióval, mint az egyikben beépített fürt. A virtuális környezet létrehozásához más Python-verziókat is használhat.
    • anaconda A package_spec anacondaként adja meg az Anaconda-csomagok virtuális környezetben való telepítéséhez.
    sudo /usr/bin/anaconda/bin/conda create --prefix /usr/bin/anaconda/envs/py35new python=3.5 anaconda=4.3 --yes
    
  2. Ha szükséges, telepítse a külső Python-csomagokat a létrehozott virtuális környezetben. Futtassa a szkriptműveleteket a fürtön az összes csomóponton a következő szkripttel a külső Python-csomagok telepítéséhez. Itt sudo jogosultsággal kell rendelkeznie, hogy fájlokat írjon a virtuális környezet mappájába.

    Keresse meg a csomagindexben az elérhető csomagok teljes listáját. Az elérhető csomagok listáját más forrásokból is lekérheti. Telepítheti például a conda-forge-on keresztül elérhetővé tett csomagokat.

    Ha a legújabb verziójú kódtárat szeretne telepíteni, használja a következő parancsot:

    • Conda-csatorna használata:

      • seaborn a telepíteni kívánt csomagnév.
      • -n py35new adja meg az imént létrehozott virtuális környezet nevét. Ügyeljen arra, hogy a virtuális környezet létrehozása alapján ennek megfelelően módosítsa a nevet.
      sudo /usr/bin/anaconda/bin/conda install seaborn -n py35new --yes
      
    • Vagy használja a PyPi-adattárat, módosítsa seaborn és py35new ennek megfelelően:

      sudo /usr/bin/anaconda/envs/py35new/bin/pip install seaborn
      

    Ha egy adott verziójú tárat szeretne telepíteni, használja a következő parancsot:

    • Conda-csatorna használata:

      • numpy=1.16.1 A telepíteni kívánt csomag neve és verziója.
      • -n py35new adja meg az imént létrehozott virtuális környezet nevét. Ügyeljen arra, hogy a virtuális környezet létrehozása alapján ennek megfelelően módosítsa a nevet.
      sudo /usr/bin/anaconda/bin/conda install numpy=1.16.1 -n py35new --yes
      
    • Vagy használja a PyPi-adattárat, módosítsa numpy==1.16.1 és py35new ennek megfelelően:

      sudo /usr/bin/anaconda/envs/py35new/bin/pip install numpy==1.16.1
      

    Ha nem ismeri a virtuális környezet nevét, az SSH-t a fürt fő csomópontjához irányíthatja, és futtathatja /usr/bin/anaconda/bin/conda info -e az összes virtuális környezet megjelenítéséhez.

  3. Módosítsa a Spark és Livy konfigurációit, és mutasson a létrehozott virtuális környezetre.

    1. Nyissa meg az Ambari felhasználói felületét, lépjen a Spark 2 lap Konfigurációk lapjára.

      Change Spark and Livy config through Ambari.

    2. Bontsa ki az Advanced livy2-env elemet, alul adja hozzá a következő utasításokat. Ha a virtuális környezetet egy másik előtaggal telepítette, módosítsa az elérési utat ennek megfelelően.

      export PYSPARK_PYTHON=/usr/bin/anaconda/envs/py35new/bin/python
      export PYSPARK_DRIVER_PYTHON=/usr/bin/anaconda/envs/py35new/bin/python
      

      Change Livy config through Ambari.

    3. Bontsa ki a Speciális spark2-env elemet, és cserélje le alul a meglévő exportálási PYSPARK_PYTHON utasítást. Ha a virtuális környezetet egy másik előtaggal telepítette, módosítsa az elérési utat ennek megfelelően.

      export PYSPARK_PYTHON=${PYSPARK_PYTHON:-/usr/bin/anaconda/envs/py35new/bin/python}
      

      Change Spark config through Ambari.

    4. Mentse a módosításokat, és indítsa újra az érintett szolgáltatásokat. Ezek a módosítások a Spark 2 szolgáltatás újraindítását igénylik. Az Ambari felhasználói felülete kérni fogja a szükséges újraindítási emlékeztetőt, majd kattintson az Újraindítás gombra az összes érintett szolgáltatás újraindításához.

      Restart services.

    5. Állítson be két tulajdonságot a Spark-munkamenetre, hogy a feladat a frissített Spark-konfigurációra mutatjon: spark.yarn.appMasterEnv.PYSPARK_PYTHON és spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON.

      A terminál vagy jegyzetfüzet használatával használja a függvényt spark.conf.set .

      spark.conf.set("spark.yarn.appMasterEnv.PYSPARK_PYTHON", "/usr/bin/anaconda/envs/py35/bin/python")
      spark.conf.set("spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON", "/usr/bin/anaconda/envs/py35/bin/python")
      

      Ha használja livy, adja hozzá a következő tulajdonságokat a kérelem törzséhez:

      "conf" : {
      "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"/usr/bin/anaconda/envs/py35/bin/python",
      "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"/usr/bin/anaconda/envs/py35/bin/python"
      }
      
  4. Ha az új létrehozott virtuális környezetet szeretné használni a Jupyteren. Módosítsa a Jupyter konfigurációit, és indítsa újra a Jupytert. Futtassa a szkriptműveleteket az összes fejléccsomóponton az alábbi utasítással, amely a Jupytert az új létrehozott virtuális környezetre mutatja. Mindenképpen módosítsa a virtuális környezethez megadott előtag elérési útját. A szkriptművelet futtatása után indítsa újra a Jupyter szolgáltatást az Ambari felhasználói felületén keresztül a módosítás elérhetővé tétele érdekében.

    sudo sed -i '/python3_executable_path/c\ \"python3_executable_path\" : \"/usr/bin/anaconda/envs/py35new/bin/python3\"' /home/spark/.sparkmagic/config.json
    

    A Kód futtatásával duplán megerősítheti a Python-környezetet a Jupyter Notebookban:

    Check Python version in Jupyter Notebook.

Következő lépések