Sdílet prostřednictvím


Bezpečná správa prostředí Pythonu ve službě Azure HDInsight pomocí akce skriptu

HDInsight obsahuje dvě integrované instalace Pythonu v clusteru Spark, Anaconda Python 2.7 a Python 3.5. Zákazníci můžou potřebovat přizpůsobit prostředí Pythonu, jako je instalace externích balíčků Pythonu. Tady si ukážeme osvědčený postup bezpečné správy prostředí Pythonu pro clustery Apache Spark ve službě HDInsight.

Požadavky

Cluster Apache Spark ve službě HDInsight. Pokyny najdete v tématu Vytváření clusterů Apache Spark ve službě Azure HDInsight. Pokud ještě nemáte cluster Spark ve službě HDInsight, můžete během vytváření clusteru spustit akce skriptů. Projděte si dokumentaci, jak používat akce vlastních skriptů.

Podpora opensourcového softwaru používaného v clusterech HDInsight

Služba Microsoft Azure HDInsight používá prostředí opensourcových technologií vytvořených kolem Apache Hadoopu. Microsoft Azure poskytuje obecnou úroveň podpory opensourcových technologií. Další informace najdete na webu Nejčastější dotazy k podpoře Azure. Služba HDInsight poskytuje další úroveň podpory integrovaných komponent.

Ve službě HDInsight jsou k dispozici dva typy opensourcových komponent:

Součást Popis
Vestavěný Tyto komponenty jsou předinstalované v clusterech HDInsight a poskytují základní funkce clusteru. Například Apache Hadoop YARN Resource Manager, dotazovací jazyk Apache Hive (HiveQL) a knihovna Mahout patří do této kategorie. Úplný seznam komponent clusteru je k dispozici v novinkách ve verzích clusteru Apache Hadoop poskytovaných službou HDInsight.
Na zakázku Jako uživatel clusteru můžete nainstalovat nebo použít jakoukoli komponentu dostupnou v komunitě nebo vytvořenou vámi.

Důležité

Plně se podporují komponenty poskytované clusterem HDInsight. Podpora Microsoftu pomáhá izolovat a řešit problémy související s těmito komponentami.

Vlastní komponenty dostanou podporu v rámci komerčních možností, která vám pomůže při dalším řešení problému. Podpora Microsoftu může problém vyřešit nebo vás může požádat, abyste se zapojili do dostupných kanálů pro opensourcové technologie, kde najdete podrobné znalosti dané technologie. Například existuje mnoho webů komunity, které lze použít, například: Stránka otázek Microsoft Q&A pro HDInsight, https://stackoverflow.com. Projekty Apache mají také weby projektů na https://apache.org.

Vysvětlení výchozí instalace Pythonu

Klastry HDInsight Spark mají nainstalovanou Anacondu. V clusteru jsou dvě instalace Pythonu, Anaconda Python 2.7 a Python 3.5. Následující tabulka ukazuje výchozí nastavení Pythonu pro Spark, Livy a Jupyter.

Nastavení Python 2.7 Python 3.5
Cesta /usr/bin/anaconda/bin /usr/bin/anaconda/envs/py35/bin
Verze Sparku Výchozí hodnota nastavená na 2.7 Může změnit konfiguraci na verzi 3.5.
Verze Livy Výchozí hodnota nastavená na 2.7 Může změnit konfiguraci na verzi 3.5.
Jupyter Jádro PySpark Jádro PySpark3

Pro verzi Spark 3.1.2 se odebere jádro Apache PySpark a pod kterým se nainstaluje /usr/bin/miniforge/envs/py38/binnové prostředí Pythonu 3.8, které používá jádro PySpark3. Proměnné prostředí PYSPARK_PYTHON a PYSPARK3_PYTHON se aktualizují následovně:

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

Bezpečné instalace externích balíčků Pythonu

Cluster HDInsight závisí na integrovaném prostředí Pythonu, a to jak v Pythonu 2.7, tak v Pythonu 3.5. Přímá instalace vlastních balíčků v těchto výchozích integrovaných prostředích může způsobit neočekávané změny verze knihovny. Dále přerušte cluster. Pokud chcete bezpečně nainstalovat vlastní externí balíčky Pythonu pro aplikace Spark, postupujte podle kroků.

  1. Vytvořte virtuální prostředí Pythonu pomocí conda. Virtuální prostředí poskytuje izolovaný prostor pro vaše projekty bez narušení ostatních. Při vytváření virtuálního prostředí Pythonu můžete zadat verzi Pythonu, kterou chcete použít. Stále potřebujete vytvořit virtuální prostředí, i když chcete použít Python 2.7 a 3.5. Tento požadavek zajišťuje, že výchozí prostředí clusteru se nezhroutí. Spuštěním akcí skriptů v clusteru pro všechny uzly s následujícím skriptem vytvořte virtuální prostředí Pythonu.

    • --prefix určuje cestu, kde se nachází virtuální prostředí Conda. Existuje několik konfigurací, které je potřeba dále změnit na základě zde zadané cesty. V tomto příkladu použijeme py35new, protože cluster už má existující virtuální prostředí s názvem py35.
    • python= určuje verzi Pythonu pro virtuální prostředí. V tomto příkladu používáme verzi 3.5, stejnou verzi jako cluster integrovaný v jednom. K vytvoření virtuálního prostředí můžete použít také jiné verze Pythonu.
    • anaconda určuje package_spec jako anaconda k instalaci balíčků Anaconda ve virtuálním prostředí.
    sudo /usr/bin/anaconda/bin/conda create --prefix /usr/bin/anaconda/envs/py35new python=3.5 anaconda=4.3 --yes
    
  2. V případě potřeby nainstalujte do vytvořeného virtuálního prostředí externí balíčky Pythonu. Proveďte akce skriptů na svém clusteru na všech uzlech pomocí následujícího skriptu k instalaci externích balíčků Pythonu. Abyste mohli zapisovat soubory do složky virtuálního prostředí, musíte mít oprávnění sudo.

    V indexu balíčku vyhledejte úplný seznam dostupných balíčků. Můžete také získat seznam dostupných balíčků z jiných zdrojů. Balíčky, které jsou dostupné například prostřednictvím conda-forge, můžete nainstalovat.

    Pokud chcete nainstalovat knihovnu s nejnovější verzí, použijte následující příkaz:

    • Použití kanálu Conda:

      • seaborn je název balíčku, který chcete nainstalovat.
      • -n py35new zadejte název virtuálního prostředí, který se právě vytvoří. Nezapomeňte název odpovídajícím způsobem změnit na základě vytvoření vašeho virtuálního prostředí.
      sudo /usr/bin/anaconda/bin/conda install seaborn -n py35new --yes
      
    • Nebo použijte úložiště PyPi, změňte seaborn a py35new odpovídajícím způsobem:

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

    Pokud chcete nainstalovat knihovnu s konkrétní verzí, použijte následující příkaz:

    • Použití kanálu Conda:

      • numpy=1.16.1 je název balíčku a verze, kterou chcete nainstalovat.
      • -n py35new zadejte název virtuálního prostředí, který se právě vytvoří. Nezapomeňte název odpovídajícím způsobem změnit na základě vytvoření vašeho virtuálního prostředí.
      sudo /usr/bin/anaconda/bin/conda install numpy=1.16.1 -n py35new --yes
      
    • Nebo použijte úložiště PyPi, změňte numpy==1.16.1 a py35new odpovídajícím způsobem:

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

    Pokud název virtuálního prostředí neznáte, můžete SSH přejít k hlavnímu uzlu clusteru a spustit /usr/bin/anaconda/bin/conda info -e , aby se zobrazila všechna virtuální prostředí.

  3. Změňte konfigurace Sparku a Livy a přejděte na vytvořené virtuální prostředí.

    1. Otevřete uživatelské rozhraní Ambari, přejděte na stránku Spark 2, kartu Konfigurace.

      Změňte konfiguraci Sparku a Livy prostřednictvím Ambari.

    2. Otevřete pokročilou sekci livy2-env a přidejte následující příkazy na konec. Pokud jste nainstalovali virtuální prostředí s jinou předponou, změňte cestu odpovídajícím způsobem.

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

      Změňte konfiguraci Livy prostřednictvím Ambari.

    3. Rozbalte Advanced spark2-env, nahraďte existující exportní příkaz PYSPARK_PYTHON umístěný dole. Pokud jste nainstalovali virtuální prostředí s jinou předponou, změňte cestu odpovídajícím způsobem.

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

      Změňte konfiguraci Sparku prostřednictvím Ambari.

    4. Uložte změny a restartujte ovlivněné služby. Tyto změny vyžadují restartování služby Spark 2. Uživatelské rozhraní Ambari zobrazí výzvu k požadovanému připomenutí restartování, kliknutím na Restartovat restartujte všechny ovlivněné služby.

      Restartujte služby.

    5. Nastavte dvě vlastnosti relace Sparku, abyste zajistili, že úloha odkazuje na aktualizovanou konfiguraci Sparku: spark.yarn.appMasterEnv.PYSPARK_PYTHON a spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON.

      Pomocí terminálu nebo poznámkového bloku použijte spark.conf.set funkci.

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

      Pokud používáte livy, přidejte do textu požadavku následující vlastnosti:

      "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. Pokud chcete použít nové vytvořené virtuální prostředí v Jupyteru. Změňte konfigurace Jupyteru a restartujte Jupyter. Spusťte akce skriptu na všech uzlech záhlaví pomocí následujícího příkazu, který ukazuje Jupyter na nově vytvořené virtuální prostředí. Nezapomeňte upravit cestu k prefixu, který jste nastavili pro své virtuální prostředí. Po spuštění této akce skriptu restartujte službu Jupyter prostřednictvím uživatelského rozhraní Ambari, aby byla tato změna dostupná.

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

    Spuštěním kódu můžete dvakrát potvrdit prostředí Pythonu v Poznámkovém bloku Jupyter:

    Zkontrolujte verzi Pythonu v Jupyter Notebooku.

Další kroky