Подготовка и использование виртуальных окружений Python
При использовании PySpark в кластере Yandex Data Processing часто бывает нужно установить или обновить пакеты Python. При этом изменение основного окружения Python в кластере может оказаться слишком трудоемким и нецелесообразным. В качестве альтернативы при запуске каждого задания можно использовать изолированные виртуальные окружения:
-
Подготовьте виртуальное окружение.
Для обеспечения совместимости подготовка виртуального окружения выполняется на временном кластере Yandex Data Processing. Затем виртуальное окружение помещается в архив, который сохраняется в бакете Object Storage.
-
Используйте виртуальное окружение из архива при запуске заданий в кластерах Yandex Data Processing.
Виртуальное окружение Python можно использовать:
Подготовка виртуального окружения Python
-
Создайте сервисный аккаунт с ролями
dataproc.agent
иdataproc.provisioner
. -
В Object Storage создайте бакет для хранения логов кластера и архива с виртуальным окружением.
-
Настройте ACL бакета, предоставив созданному сервисному аккаунту разрешение
READ и WRITE
. -
Создайте временный кластер Yandex Data Processing. При создании укажите:
- Версию Yandex Data Processing, такую же, как у кластера, на котором планируется использовать окружение. Это необходимо для обеспечения совместимости.
- Компоненты:
SPARK
;YARN
.
- Бакет для хранения логов.
- Сервисный аккаунт с доступом к бакету.
- (Опционально) Публичный доступ к подкластеру с хостом-мастером.
Настройки ресурсов хостов рекомендуется указать минимальными.
-
Подключитесь по SSH к временному кластеру Yandex Data Processing.
-
Запустите встроенный инструмент Virtualenv
для работы с виртуальными окружениями:python -m venv pyspark_venv && \ source pyspark_venv/bin/activate
-
Установите
venv-pack
и другие необходимые вам модули окружения Python:pip install venv-pack <список_модулей>
Пример:
pip install venv-pack pyarrow pandas catboost
-
Упакуйте сформированное окружение в архив с помощью команды
venv-pack
:venv-pack -o <имя_архива>.tar.gz
-
Отправьте архив с окружением в подготовленный ранее бакет Object Storage:
hdfs dfs -copyFromLocal <имя_архива>.tar.gz s3a://<имя_бакета>/
-
Удалите временный кластер Yandex Data Processing, чтобы за него не списывалась плата.
Использование виртуального окружения
Чтобы использовать подготовленное виртуальное окружение в кластере Yandex Data Processing, предоставьте сервисному аккаунту кластера доступ на чтение из бакета, в котором хранится архив. Это можно сделать двумя способами:
- Отредактируйте ACL бакета, выдав сервисному аккаунту кластера права на чтение (
READ
). - Назначьте сервисному аккаунту роль
storage.viewer
.
Использование виртуального окружения при обычном запуске PySpark-заданий
При создании задания PySpark укажите следующие значения для свойств Spark
-
spark.submit.deployMode=cluster
— режим размещения драйвера.Запуск заданий должен выполняться в режиме
cluster
, чтобы виртуальное окружение было правильно подготовлено. Подробнее о режиме размещения драйвера см. в разделе Распределение ресурсов. -
spark.yarn.dist.archives='s3a://<имя_бакета>/<имя_архива>.tar.gz#<псевдоним>'
— путь к архиву с подготовленным окружением.После символа
#
укажите псевдоним окружения, он может быть любым. Псевдоним будет служить именем подкаталога, в который будет распакован архив. -
spark.yarn.appMasterEnv.PYSPARK_PYTHON=./<псевдоним>/bin/python
— переопределение команды запуска интерпретатора Python для процесса YARN Application Master. -
spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=./<псевдоним>/bin/python
— переопределение команды запуска интерпретатора Python для драйвера задания.
В результате входящие в состав виртуального окружения зависимости будут доступны при выполнении задания.
Использование виртуального окружения в интеграции кластера Yandex Data Processing с Yandex DataSphere
Интеграция Yandex DataSphere и Yandex Data Processing основана на использовании компонента Apache Livy
Чтобы использовать виртуальные окружения Python в интеграции с Yandex DataSphere, выполните дополнительные настройки:
-
На стороне кластера Yandex Data Processing установите режим размещения драйвера
cluster
. Для этого при изменении кластера передайте значение свойства компонентаlivy:livy.spark.deploy-mode=cluster
.Подробнее о режиме размещения драйвера см. в разделе Распределение ресурсов.
-
На стороне сервиса Yandex DataSphere создайте сессию Livy со следующими настройками:
%create_livy_session \ --cluster <имя_или_идентификатор_кластера> --id <идентификатор_сессии_Livy> \ --conf spark.yarn.dist.archives=s3a://<имя_бакета>/<имя_архива>.tar.gz#<псевдоним> \ --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./<псевдоним>/bin/python \ --conf <прочие_параметры_контекста_Spark> ...
Где:
<имя_или_идентификатор_кластера>
— имя или идентификатор используемого в интеграции кластера Yandex Data Processing.<идентификатор_сессии_Livy>
— произвольная строка, идентификатор сессии Livy в рамках кластера.<имя_бакета>
— бакет, в котором лежит архив с окружением.<имя_архива>
— подготовленный архив с окружением Python.<псевдоним>
— псевдоним окружения, может быть любым. Псевдоним будет служить именем подкаталога, в который будет распакован архив.<прочие_параметры_контекста_Spark>
задаются при необходимости. Полный список параметров приведен в документации Spark .
Укажите созданную сессию при запуске кода Python в кластере. Зависимости, включенные в состав виртуального окружения, будут доступны для использования.
Использование виртуального окружения в ноутбуке Zeppelin
Чтобы использовать виртуальные окружения Python при работе в ноутбуке Zeppelin:
-
В интерфейсе Zeppelin перейдите в настройки интерпретатора (Interpreter) и отредактируйте блок spark, установив режим работы контекста Spark в значения
Per Note
иIsolated
. Таким образом разные ноутбуки смогут задействовать разные виртуальные окружения. -
Создайте новую ячейку
%spark.conf
и передайте в ней переменные для сессии Spark:%spark.conf spark.submit.deployMode cluster spark.yarn.dist.archives s3a://<имя_бакета>/<имя_архива>.tar.gz#<псевдоним> spark.yarn.appMasterEnv.PYSPARK_PYTHON ./<псевдоним>/bin/python spark.pyspark.python ./<псевдоним>/bin/python
Где:
-
spark.submit.deployMode cluster
— режим размещения драйвера.Запуск заданий должен выполняться в режиме
cluster
, чтобы виртуальное окружение было правильно подготовлено. Подробнее о режиме размещения драйвера см. в разделе Распределение ресурсов. -
spark.yarn.dist.archives 's3a://<имя_бакета>/<имя_архива>.tar.gz#<псевдоним>'
— путь к архиву с подготовленным окружением.После символа
#
укажите псевдоним окружения, он может быть любым. Псевдоним будет служить именем подкаталога, в который будет распакован архив. -
spark.yarn.appMasterEnv.PYSPARK_PYTHON ./<псевдоним>/bin/python
— переопределение команды запуска интерпретатора Python для процесса YARN Application Master. -
spark.pyspark.python ./<псевдоним>/bin/python
— переопределение команды запуска интерпретатора Python для драйвера задания.
При выполнении следующей ячейки, использующей Spark (например, ячейки в режимах
%spark.pyspark
или%spark.sql
) будет выполнено создание сессии Spark с указанными настройками. В этой сессии будут доступны зависимости, включенные в состав виртуального окружения. -