Hantera Python-miljön i Azure HDInsight på ett säkert sätt med skriptåtgärd

HDInsight har två inbyggda Python-installationer i Spark-klustret, Anaconda Python 2.7 och Python 3.5. Kunder kan behöva anpassa Python-miljön som att installera externa Python-paket. Här visar vi bästa praxis för att på ett säkert sätt hantera Python-miljöer för Apache Spark-kluster i HDInsight.

Förutsättningar

Ett Apache Spark-kluster i HDInsight. Anvisningar finns i Skapa Apache Spark-kluster i Azure HDInsight. Om du inte redan har ett Spark-kluster i HDInsight kan du köra skriptåtgärder när klustret skapas. Gå till dokumentationen om hur du använder anpassade skriptåtgärder.

Stöd för programvara med öppen källkod som används i HDInsight-kluster

Microsoft Azure HDInsight-tjänsten använder en miljö med tekniker med öppen källkod som bildas runt Apache Hadoop. Microsoft Azure tillhandahåller en allmän supportnivå för tekniker med öppen källkod. Mer information finns på webbplatsen med vanliga frågor och svar om Azure-support. HDInsight-tjänsten ger ytterligare stöd för inbyggda komponenter.

Det finns två typer av komponenter med öppen källkod som är tillgängliga i HDInsight-tjänsten:

Komponent Beskrivning
Inbyggd Dessa komponenter är förinstallerade i HDInsight-kluster och ger klustrets kärnfunktioner. Till exempel tillhör Apache Hadoop YARN Resource Manager, Apache Hive-frågespråket (HiveQL) och Mahout-biblioteket den här kategorin. En fullständig lista över klusterkomponenter finns i Nyheter i Apache Hadoop-klusterversionerna som tillhandahålls av HDInsight.
Anpassat Som användare av klustret kan du installera eller använda valfri komponent som är tillgänglig i communityn eller som skapats av dig i din arbetsbelastning.

Viktigt

Komponenter som medföljer HDInsight-klustret stöds fullt ut. Microsoft Support hjälper till att isolera och lösa problem som rör dessa komponenter.

Anpassade komponenter får kommersiellt rimlig support för att hjälpa dig att ytterligare felsöka problemet. Microsofts support kanske kan lösa problemet eller så kan de be dig att engagera tillgängliga kanaler för tekniker med öppen källkod där djup expertis för den tekniken finns. Det finns till exempel många community-webbplatser som kan användas, till exempel: Microsoft Q&A-frågesida för HDInsight, https://stackoverflow.com. Apache-projekt har också projektwebbplatser på https://apache.org.

Förstå standardinstallationen av Python

HDInsight Spark-kluster har Anaconda installerat. Det finns två Python-installationer i klustret, Anaconda Python 2.7 och Python 3.5. I tabellen nedan visas standardinställningarna för Python för Spark, Livy och Jupyter.

Inställning Python 2.7 Python 3.5
Sökväg /usr/bin/anaconda/bin /usr/bin/anaconda/envs/py35/bin
Spark-version Standardvärdet är 2,7 Kan ändra konfigurationen till 3.5
Livy-version Standardvärdet är 2,7 Kan ändra konfigurationen till 3.5
Jupyter PySpark-kernel PySpark3-kernel

För Spark 3.1.2-versionen tas Apache PySpark-kerneln bort och en ny Python 3.8-miljö installeras under /usr/bin/miniforge/envs/py38/bin vilken används av PySpark3-kerneln. Miljövariablerna PYSPARK_PYTHON och PYSPARK3_PYTHON uppdateras med följande:

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

Installera externa Python-paket på ett säkert sätt

HDInsight-klustret är beroende av den inbyggda Python-miljön, både Python 2.7 och Python 3.5. Om du installerar anpassade paket direkt i de inbyggda standardmiljöerna kan det orsaka oväntade ändringar i biblioteksversionen. Och dela upp klustret ytterligare. Följ stegen nedan om du vill installera anpassade externa Python-paket för dina Spark-program på ett säkert sätt.

  1. Skapa en virtuell Python-miljö med hjälp av conda. En virtuell miljö ger ett isolerat utrymme för dina projekt utan att förstöra andra. När du skapar den virtuella Python-miljön kan du ange den Python-version som du vill använda. Du måste fortfarande skapa en virtuell miljö även om du vill använda Python 2.7 och 3.5. Det här kravet är att se till att klustrets standardmiljö inte går sönder. Kör skriptåtgärder i klustret för alla noder med nedanstående skript för att skapa en virtuell Python-miljö.

    • --prefix anger en sökväg där en virtuell Conda-miljö finns. Det finns flera konfigurationer som behöver ändras ytterligare baserat på sökvägen som anges här. I det här exemplet använder vi py35new eftersom klustret redan har en befintlig virtuell miljö med namnet py35.
    • python= anger Python-versionen för den virtuella miljön. I det här exemplet använder vi version 3.5, samma version som det inbyggda klustret. Du kan också använda andra Python-versioner för att skapa den virtuella miljön.
    • anaconda anger package_spec som anaconda för att installera Anaconda-paket i den virtuella miljön.
    sudo /usr/bin/anaconda/bin/conda create --prefix /usr/bin/anaconda/envs/py35new python=3.5 anaconda=4.3 --yes
    
  2. Installera externa Python-paket i den skapade virtuella miljön om det behövs. Kör skriptåtgärder i klustret för alla noder med nedanstående skript för att installera externa Python-paket. Du måste ha sudo-behörighet här för att kunna skriva filer till mappen för den virtuella miljön.

    Sök i paketindexet efter den fullständiga listan över paket som är tillgängliga. Du kan också hämta en lista över tillgängliga paket från andra källor. Du kan till exempel installera paket som görs tillgängliga via conda-forge.

    Använd kommandot nedan om du vill installera ett bibliotek med den senaste versionen:

    • Använd Conda-kanalen:

      • seaborn är det paketnamn som du vill installera.
      • -n py35new ange namnet på den virtuella miljön som just skapas. Se till att ändra namnet på motsvarande sätt baserat på hur du skapar den virtuella miljön.
      sudo /usr/bin/anaconda/bin/conda install seaborn -n py35new --yes
      
    • Eller använd PyPi-lagringsplatsen, ändra seaborn och py35new på motsvarande sätt:

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

    Använd följande kommando om du vill installera ett bibliotek med en specifik version:

    • Använd Conda-kanalen:

      • numpy=1.16.1 är det paketnamn och den version som du vill installera.
      • -n py35new ange namnet på den virtuella miljön som just skapas. Se till att ändra namnet på motsvarande sätt baserat på hur du skapar den virtuella miljön.
      sudo /usr/bin/anaconda/bin/conda install numpy=1.16.1 -n py35new --yes
      
    • Eller använd PyPi-lagringsplatsen, ändra numpy==1.16.1 och py35new på motsvarande sätt:

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

    Om du inte känner till namnet på den virtuella miljön kan du SSH till huvudnoden i klustret och köra /usr/bin/anaconda/bin/conda info -e för att visa alla virtuella miljöer.

  3. Ändra Spark- och Livy-konfigurationer och peka på den skapade virtuella miljön.

    1. Öppna Ambari-användargränssnittet, gå till Spark2-sidan, fliken Konfigurationer.

      Change Spark and Livy config through Ambari

    2. Expandera Advanced livy2-env och lägg till nedanstående instruktioner längst ned. Om du har installerat den virtuella miljön med ett annat prefix ändrar du sökvägen på motsvarande sätt.

      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. Expandera Advanced spark2-env och ersätt den befintliga export-PYSPARK_PYTHON-instruktionen längst ned. Om du har installerat den virtuella miljön med ett annat prefix ändrar du sökvägen på motsvarande sätt.

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

      Change Spark config through Ambari

    4. Spara ändringarna och starta om de tjänster som påverkas. Dessa ändringar behöver startas om av Spark2-tjänsten. Ambari-användargränssnittet uppmanar en obligatorisk omstartspåminnelse. Klicka på Starta om för att starta om alla berörda tjänster.

      Restart services

    5. Ange två egenskaper för Spark-sessionen för att säkerställa att jobbet pekar på den uppdaterade Spark-konfigurationen: spark.yarn.appMasterEnv.PYSPARK_PYTHON och spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON.

      Använd funktionen med hjälp av terminalen spark.conf.set eller en notebook-fil.

      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")
      

      Om du använder livy lägger du till följande egenskaper i begärandetexten:

      "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. Om du vill använda den nya skapade virtuella miljön på Jupyter. Ändra Jupyter-konfigurationer och starta om Jupyter. Kör skriptåtgärder på alla huvudnoder med instruktionen nedan för att peka Jupyter till den nya skapade virtuella miljön. Se till att ändra sökvägen till det prefix som du har angett för din virtuella miljö. När du har kört den här skriptåtgärden startar du om Jupyter-tjänsten via Ambari-användargränssnittet för att göra den här ändringen tillgänglig.

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

    Du kan dubbel bekräfta Python-miljön i Jupyter Notebook genom att köra koden nedan:

    Check Python version in Jupyter Notebook

Nästa steg