Een Python-omgeving veilig beheren in Azure HDInsight met scriptactie

HDInsight heeft twee ingebouwde Python-installaties op het Spark-cluster: Anaconda Python 2.7 en Python 3.5. Klanten moeten mogelijk de Python-omgeving aanpassen, zoals het installeren van externe Python-pakketten. Hier laten we de best practice zien voor het veilig beheren van Python-omgevingen voor Apache Spark-clusters in HDInsight.

Vereisten

Een Apache Spark-cluster in HDInsight. Zie Apache Spark-clusters maken in Azure HDInsight voor instructies. Als u nog geen Spark-cluster in HDInsight hebt, kunt u scriptacties uitvoeren tijdens het maken van het cluster. Raadpleeg de documentatie over het gebruik van aangepaste scriptacties.

Ondersteuning voor opensource-software die wordt gebruikt in HDInsight-clusters

De Microsoft Azure HDInsight-service maakt gebruik van een omgeving met opensource-technologieën die zijn gevormd rond Apache Hadoop. Microsoft Azure biedt een algemeen ondersteuningsniveau voor opensource-technologieën. Zie de website met veelgestelde vragen over Azure-ondersteuning voor meer informatie. De HDInsight-service biedt een extra ondersteuningsniveau voor ingebouwde onderdelen.

Er zijn twee typen opensource-onderdelen die beschikbaar zijn in de HDInsight-service:

Onderdeel Beschrijving
Ingebouwd Deze onderdelen zijn vooraf geïnstalleerd op HDInsight-clusters en bieden kernfunctionaliteit van het cluster. Apache Hadoop YARN Resource Manager, de Apache Hive-querytaal (HiveQL) en de Mahout-bibliotheek behoren bijvoorbeeld tot deze categorie. Er is een volledige lijst met clusteronderdelen beschikbaar in wat er nieuw is in de Apache Hadoop-clusterversies van HDInsight.
Aangepast telefoonnummer Als gebruiker van het cluster kunt u elk onderdeel van uw workload installeren of gebruiken dat beschikbaar is in de community of door u is gemaakt.

Belangrijk

Onderdelen die worden geleverd met het HDInsight-cluster, worden volledig ondersteund. Microsoft Ondersteuning helpt bij het isoleren en oplossen van problemen met betrekking tot deze onderdelen.

Aangepaste onderdelen ontvangen commercieel redelijke ondersteuning om u te helpen het probleem verder op te lossen. Microsoft-ondersteuning kan het probleem mogelijk oplossen of ze vragen u om beschikbare kanalen in te schakelen voor de opensource-technologieën waar diepe expertise voor die technologie wordt gevonden. Er zijn bijvoorbeeld veel communitysites die kunnen worden gebruikt, zoals: Microsoft Q&A-vragenpagina voor HDInsight, https://stackoverflow.com. Apache-projecten hebben ook projectsites op https://apache.org.

Meer informatie over de standaardinstallatie van Python

HDInsight Spark-clusters hebben Anaconda geïnstalleerd. Er zijn twee Python-installaties in het cluster, Anaconda Python 2.7 en Python 3.5. In de volgende tabel ziet u de standaardInstellingen voor Python voor Spark, Livy en Jupyter.

Instelling Python 2.7 Python 3.5
Pad /usr/bin/anaconda/bin /usr/bin/anaconda/envs/py35/bin
Spark-versie Standaard ingesteld op 2.7 Kan de configuratie wijzigen in 3.5
Livy-versie Standaard ingesteld op 2.7 Kan de configuratie wijzigen in 3.5
Jupyter PySpark-kernel PySpark3-kernel

Voor de Versie van Spark 3.1.2 wordt de Apache PySpark-kernel verwijderd en wordt er een nieuwe Python 3.8-omgeving geïnstalleerd onder /usr/bin/miniforge/envs/py38/bin, die wordt gebruikt door de PySpark3-kernel. De PYSPARK_PYTHON en PYSPARK3_PYTHON omgevingsvariabelen worden bijgewerkt met het volgende:

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

Externe Python-pakketten veilig installeren

HDInsight-cluster is afhankelijk van de ingebouwde Python-omgeving, zowel Python 2.7 als Python 3.5. Het rechtstreeks installeren van aangepaste pakketten in deze standaard ingebouwde omgevingen kan onverwachte wijzigingen in bibliotheekversies veroorzaken. En breek het cluster verder. Volg de stappen om aangepaste externe Python-pakketten voor uw Spark-toepassingen veilig te installeren.

  1. Maak een virtuele Python-omgeving met conda. Een virtuele omgeving biedt een geïsoleerde ruimte voor uw projecten zonder anderen te breken. Wanneer u de virtuele Python-omgeving maakt, kunt u de Python-versie opgeven die u wilt gebruiken. U moet nog steeds een virtuele omgeving maken, ook al wilt u Python 2.7 en 3.5 gebruiken. Deze vereiste is ervoor te zorgen dat de standaardomgeving van het cluster niet wordt verbroken. Voer scriptacties uit op uw cluster voor alle knooppunten met het volgende script om een virtuele Python-omgeving te maken.

    • --prefix hiermee geeft u een pad op waar een conda virtuele omgeving zich bevindt. Er zijn verschillende configuraties die verder moeten worden gewijzigd op basis van het pad dat hier is opgegeven. In dit voorbeeld gebruiken we de py35new, omdat het cluster al een bestaande virtuele omgeving heeft met de naam py35.
    • python= hiermee geeft u de Python-versie voor de virtuele omgeving op. In dit voorbeeld gebruiken we versie 3.5, dezelfde versie als het cluster dat is gebouwd. U kunt ook andere Python-versies gebruiken om de virtuele omgeving te maken.
    • anaconda hiermee geeft u de package_spec als anaconda voor het installeren van Anaconda-pakketten in de virtuele omgeving.
    sudo /usr/bin/anaconda/bin/conda create --prefix /usr/bin/anaconda/envs/py35new python=3.5 anaconda=4.3 --yes
    
  2. Installeer indien nodig externe Python-pakketten in de gemaakte virtuele omgeving. Voer scriptacties uit op uw cluster voor alle knooppunten met het volgende script om externe Python-pakketten te installeren. U moet hier sudo-bevoegdheden hebben om bestanden naar de map van de virtuele omgeving te schrijven.

    Zoek in de pakketindex naar de volledige lijst met beschikbare pakketten. U kunt ook een lijst met beschikbare pakketten ophalen uit andere bronnen. U kunt bijvoorbeeld pakketten installeren die beschikbaar worden gesteld via conda-forge.

    Gebruik de volgende opdracht als u een bibliotheek met de nieuwste versie wilt installeren:

    • Conda-kanaal gebruiken:

      • seaborn is de pakketnaam die u wilt installeren.
      • -n py35new geef de naam van de virtuele omgeving op die zojuist wordt gemaakt. Zorg ervoor dat u de naam wijzigt die overeenkomt met het maken van uw virtuele omgeving.
      sudo /usr/bin/anaconda/bin/conda install seaborn -n py35new --yes
      
    • Of gebruik pyPi-opslagplaats, wijzig seaborn en py35new overeenkomstig:

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

    Gebruik de volgende opdracht als u een bibliotheek met een specifieke versie wilt installeren:

    • Conda-kanaal gebruiken:

      • numpy=1.16.1 is de pakketnaam en versie die u wilt installeren.
      • -n py35new geef de naam van de virtuele omgeving op die zojuist wordt gemaakt. Zorg ervoor dat u de naam wijzigt die overeenkomt met het maken van uw virtuele omgeving.
      sudo /usr/bin/anaconda/bin/conda install numpy=1.16.1 -n py35new --yes
      
    • Of gebruik pyPi-opslagplaats, wijzig numpy==1.16.1 en py35new overeenkomstig:

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

    Als u de naam van de virtuele omgeving niet weet, kunt u SSH naar het hoofdknooppunt van het cluster en uitvoeren /usr/bin/anaconda/bin/conda info -e om alle virtuele omgevingen weer te geven.

  3. Wijzig spark- en Livy-configuraties en wijs de gemaakte virtuele omgeving aan.

    1. Open de Ambari-gebruikersinterface, ga naar de pagina Spark 2, tabblad Configuraties.

      Change Spark and Livy config through Ambari.

    2. Vouw Advanced livy2-env uit en voeg de volgende instructies onderaan toe. Als u de virtuele omgeving met een ander voorvoegsel hebt geïnstalleerd, wijzigt u het pad overeenkomstig.

      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. Vouw Advanced spark2-env uit, vervang de bestaande export PYSPARK_PYTHON instructie onderaan. Als u de virtuele omgeving met een ander voorvoegsel hebt geïnstalleerd, wijzigt u het pad overeenkomstig.

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

      Change Spark config through Ambari.

    4. Sla de wijzigingen op en start de betrokken services opnieuw op. Deze wijzigingen hebben een herstart van de Spark 2-service nodig. In de Ambari-gebruikersinterface wordt een vereiste herinnering voor opnieuw opstarten gevraagd. Klik op Opnieuw opstarten om alle betrokken services opnieuw op te starten.

      Restart services.

    5. Stel twee eigenschappen in op uw Spark-sessie om ervoor te zorgen dat de taak verwijst naar de bijgewerkte Spark-configuratie: spark.yarn.appMasterEnv.PYSPARK_PYTHON en spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON.

      Gebruik de functie met behulp van de terminal of een notebook 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")
      

      Als u gebruikmaakt livy, voegt u de volgende eigenschappen toe aan de hoofdtekst van de aanvraag:

      "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. Als u de nieuwe gemaakte virtuele omgeving op Jupyter wilt gebruiken. Jupyter-configuraties wijzigen en Jupyter opnieuw starten. Voer scriptacties uit op alle headerknooppunten met de volgende instructie om Jupyter te laten verwijzen naar de nieuwe gemaakte virtuele omgeving. Zorg ervoor dat u het pad wijzigt naar het voorvoegsel dat u hebt opgegeven voor uw virtuele omgeving. Nadat u deze scriptactie hebt uitgevoerd, start u de Jupyter-service opnieuw via de Ambari-gebruikersinterface om deze wijziging beschikbaar te maken.

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

    U kunt de Python-omgeving in Jupyter Notebook dubbel bevestigen door de code uit te voeren:

    Check Python version in Jupyter Notebook.

Volgende stappen