Безопасное управление средой 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, выполните действия.
Создайте виртуальную среду 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
При необходимости установите внешние пакеты 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
для отображения всех виртуальных сред.Измените конфигурации Spark и Livy и укажите созданную виртуальную среду.
Откройте пользовательский интерфейс Ambari, перейдите на страницу Spark 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
Разверните Advanced spark2-env и замените существующую инструкцию экспорта PYSPARK_PYTHON в нижней части. Если вы установили виртуальную среду с другим префиксом, измените путь соответствующим образом.
export PYSPARK_PYTHON=${PYSPARK_PYTHON:-/usr/bin/anaconda/envs/py35new/bin/python}
Сохраните изменения и перезапустите затронутые службы. Эти изменения требуют перезапуска службы Spark 2. В пользовательском интерфейсе Ambari появится напоминание о необходимости перезапуска. Нажмите кнопку Restart (Перезапустить), чтобы перезапустить все затронутые службы.
Задайте для сеанса 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" }
Если вы хотите использовать созданную виртуальную среду в 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, выполнив код: