Поделиться через


Безопасное управление средой Python в Azure HDInsight с помощью действия сценария

В HDInsight есть две встроенные установки Python в кластере Spark: Anaconda Python 2.7 и Python 3.5. Клиентам может потребоваться настроить среду Python, например установку внешних пакетов Python. В этой статье мы покажем лучшую методику безопасного управления средами Python для кластеров Apache Spark в HDInsight.

Необходимые компоненты

Кластер Apache Spark в HDInsight. Инструкции см. в статье Начало работы. Создание кластера Apache Spark в HDInsight на платформе Linux и выполнение интерактивных запросов с помощью SQL Spark. Если у вас еще нет кластера Spark в HDInsight, можно выполнить действия скрипта во время его создания. Обратитесь к документации по использованию настраиваемых действий сценария.

Поддержка программного обеспечения с открытым исходным кодом, используемого в кластере HDInsight

Служба Microsoft Azure HDInsight использует сформированную вокруг Apache Hadoop среду технологий с открытым кодом. Microsoft Azure предоставляет общий уровень поддержки для технологий с открытым исходным кодом. Дополнительные сведения см. на веб-сайте вопросов и ответов службы поддержки Azure. Служба HDInsight предоставляет дополнительный уровень поддержки для встроенных компонентов.

В службе HDInsight доступно два типа компонентов с открытым исходным кодом.

Компонент Description
Встроенный Эти компоненты предварительно установлены в кластерах HDInsight и предоставляют его базовые функциональные возможности. Например, к этой категории относится диспетчер ресурсов Apache Hadoop YARN, язык запросов Apache Hive (HiveQL) и библиотека Mahout. Полный список компонентов кластера доступен в статье Что представляют собой компоненты и версии Apache Hadoop, доступные в HDInsight?
Пользовательское Как пользователь кластера, вы можете установить или использовать в рабочей нагрузке любой компонент, полученный от сообщества или созданный самостоятельно.

Внимание

Компоненты, поставляемые с кластером HDInsight, полностью поддерживаются. Служба поддержки Майкрософт помогает выявлять и устранять проблемы, связанные с этими компонентами.

Настраиваемые компоненты получают ограниченную коммерчески оправданную поддержку, способствующую дальнейшей диагностике проблемы. Служба поддержки Майкрософт может устранить проблему ИЛИ вас могут попросить обратиться к специалистам по технологиям с открытым исходным кодом, используя доступные каналы связи. Например, существует множество сайтов сообщества, которые можно использовать, например: страница вопросов Microsoft Q&A для HDInsight. https://stackoverflow.com Кроме того, для проектов Apache есть соответствующие сайты на https://apache.org.

Общие сведения об установке Python по умолчанию

В кластерах HDInsight Spark установлен Anaconda. В кластере имеются два установленных компонента Python: Anaconda Python 2.7 и Python 3.5. В следующей таблице показаны параметры Python по умолчанию для Spark, Livy и Jupyter.

Параметр Python 2.7; Python 3.5
Путь /usr/bin/anaconda/bin /usr/bin/anaconda/envs/py35/bin
Версия Spark По умолчанию 2.7 Можно изменить конфигурацию на 3.5
Версия Livy По умолчанию 2.7 Можно изменить конфигурацию на 3.5
Jupyter Ядро PySpark Ядро PySpark3

Для версии Spark 3.1.2 ядро Apache PySpark удаляется, и в ядре PySpark3 устанавливается /usr/bin/miniforge/envs/py38/binновая среда Python 3.8. Переменные среды PYSPARK_PYTHON и PYSPARK3_PYTHON обновляются следующим образом:

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

Безопасная установка внешних пакетов Python

Кластер HDInsight зависит от встроенной среды Python (как Python 2.7, так и Python 3.5). Установка пользовательских пакетов непосредственно в этих встроенных средах по умолчанию может привести к непредвиденным изменениям версий библиотек и нарушить работу кластера. Чтобы безопасно установить пользовательские внешние пакеты Python для приложений Spark, выполните действия.

  1. Создайте виртуальную среду Python с помощью conda. Виртуальная среда обеспечивает изолированное пространство для проектов, которое не нарушает работу других проектов. При создании виртуальной среды Python можно указать нужную версию Python. Создавать виртуальную среду требуется даже в том случае, если вы хотите использовать Python 2.7 и 3.5. Это необходимо для того, чтобы не нарушилась работа среды кластера по умолчанию. Выполните действия скрипта в кластере для всех узлов, используя следующий скрипт, чтобы создать виртуальную среду Python.

    • --prefix задает путь, где находится виртуальная среда conda. Существует несколько конфигураций, в которые необходимо внести дальнейшие изменения в зависимости от указанного здесь пути. В этом примере используется py35new, так как в кластере уже есть виртуальная среда с именем py35.
    • python= задает версию Python для виртуальной среды. В этом примере используется версия 3.5, то есть та же версия, что и встроенная версия кластера. Для создания виртуальной среды можно также использовать другие версии Python.
    • anaconda задает anaconda в качестве package_spec для установки пакетов Anaconda в виртуальной среде.
    sudo /usr/bin/anaconda/bin/conda create --prefix /usr/bin/anaconda/envs/py35new python=3.5 anaconda=4.3 --yes
    
  2. При необходимости установите внешние пакеты Python в созданной виртуальной среде. Выполните действия скрипта в кластере для всех узлов, используя следующий скрипт, чтобы установить внешние пакеты Python. Для записи файлов в папку виртуальной среды необходимо иметь права sudo.

    Полный список доступных пакетов можно найти в указателе пакетов. Его также можно получить из других источников. Например, можно установить пакеты, предоставляемые посредством conda-forge.

    Используйте следующую команду, если вы хотите установить библиотеку со своей последней версией:

    • Используйте канал conda:

      • seaborn — это имя пакета, который нужно установить.
      • -n py35new — укажите имя только что созданной виртуальной среды. Измените имя в соответствии с созданной виртуальной средой.
      sudo /usr/bin/anaconda/bin/conda install seaborn -n py35new --yes
      
    • Либо используйте репозиторий PyPi, изменив seaborn и py35new соответствующим образом:

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

    Чтобы установить библиотеку определенной версии, используйте следующую команду:

    • Используйте канал conda:

      • numpy=1.16.1 — это имя и версия пакета, который нужно установить.
      • -n py35new — укажите имя только что созданной виртуальной среды. Измените имя в соответствии с созданной виртуальной средой.
      sudo /usr/bin/anaconda/bin/conda install numpy=1.16.1 -n py35new --yes
      
    • Либо используйте репозиторий PyPi, изменив numpy==1.16.1 и py35new соответствующим образом:

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

    Если вам не известно имя виртуальной среды, вы можете подключиться по SSH к головному узлу кластера и выполнить команду /usr/bin/anaconda/bin/conda info -e для отображения всех виртуальных сред.

  3. Измените конфигурации Spark и Livy и укажите созданную виртуальную среду.

    1. Откройте пользовательский интерфейс Ambari, перейдите на страницу Spark 2 и вкладку "Конфигурации".

      Change Spark and Livy config through Ambari.

    2. Разверните advanced livy2-env, добавьте следующие инструкции внизу. Если вы установили виртуальную среду с другим префиксом, измените путь соответствующим образом.

      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. Разверните Advanced spark2-env и замените существующую инструкцию экспорта PYSPARK_PYTHON в нижней части. Если вы установили виртуальную среду с другим префиксом, измените путь соответствующим образом.

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

      Change Spark config through Ambari.

    4. Сохраните изменения и перезапустите затронутые службы. Эти изменения требуют перезапуска службы Spark 2. В пользовательском интерфейсе Ambari появится напоминание о необходимости перезапуска. Нажмите кнопку Restart (Перезапустить), чтобы перезапустить все затронутые службы.

      Restart services.

    5. Задайте для сеанса Spark два свойства, чтобы убедиться, что задание указывает на обновленную конфигурацию Spark: spark.yarn.appMasterEnv.PYSPARK_PYTHON и spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON.

      Если вы пользуетесь терминалом или записной книжкой, используйте функцию 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")
      

      При использовании livyдобавьте следующие свойства в текст запроса:

      "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. Если вы хотите использовать созданную виртуальную среду в Jupyter, измените конфигурации Jupyter и перезапустите Jupyter. Выполните действия скрипта на всех узлах заголовков с помощью следующей инструкции, чтобы указать Jupyter на новую виртуальную среду. Не забудьте изменить в пути префикс, заданный для виртуальной среды. После выполнения этого действия скрипта перезапустите службу Jupyter в пользовательском интерфейсе Ambari, чтобы это изменение стало доступно.

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

    Вы можете дважды подтвердить среду Python в Jupyter Notebook, выполнив код:

    Check Python version in Jupyter Notebook.

Следующие шаги