Запуск Spark задач на выполнение в YTsaurus
Установка клиента
Установите пакет ytsaurus-spyt
:
$ pip install ytsaurus-spyt
Запуск задачи напрямую в YTsaurus (доступно с версии SPYT 1.76.0)
Данный способ подходит для случаев, когда нет потребности в непрерывной работе кластера. Он позволяет использовать ресурсы кластера только в случае реальной потребности в них. В сравнении с запуском приложений во внутреннем Standalone Spark кластере данный способ работает чуть дольше за счет того, что каждый раз необходимо поднимать отдельную операцию для запуска приложения, однако с другой стороны он позволяет освободить ресурсы сразу же, как только в них больше не будет необходимости.
Запуск задач напрямую в YTsaurus рекомендуется в следующих случаях:
- Выполнение разовых расчетов.
- Запуск задач, имеющих низкую периодичность (реже 1 раза в час).
- Ad-hoc аналитика при помощи консольных утилит
spark-shell
илиpyspark
(Для аналитики вJupyter
пока что нужно использовать способ с созданием внутреннего standalone кластера).
Для того чтобы воспользоваться данным способом, необходимо выполнить следующие шаги:
- Активируйте конфигурацию SPYT при помощи команды
source spyt-env
. - Загрузите исполняемый файл и его зависимости в Кипарис.
- Запустите задачу на выполнение при помощи следующей команды.
$ spark-submit --master ytsaurus://<cluster-name> --deploy-mode cluster --num-executors 5 --queue research yt:/<path to .py file or .jar file>
Опции:
--master
— адрес прокси кластера;--queue
— название пула в планировщике, в котором нужно запустить расчёт
Назначение остальных опций соответствует их описанию в документации spark-submit
(полный список выводится по команде spark-submit --help
). Можно использовать почти все доступные опции за исключением следующих:
--conf spark.dynamicAllocation.enabled
— в настоящий момент поддержка динамического выделения ресурсов не реализована, поэтому эту опцию лучше не выставлять вtrue
;--py-files, --files, --archives
— с локальными файлами не работают, можно использовать только те, которые были предварительно загружены в Кипарис.
В сравнении со standalone кластером, в данном режиме не реализована поддержка History server. Для получения диагностической информации можно воспользоваться логами YTsaurus операций. Нужно учесть два момента: во-первых, доступны только логи, которые пишутся в stderr, поэтому нужно сделать соответствующие настройки логирования в запускаемом Spark приложении. Во-вторых, в настоящий момент драйвер и экзекьюторы запускаются в разных YTsaurus операциях, соответственно логи нужно смотреть и в той, и в другой.
Запуск standalone Spark кластера
Данный способ подходит при интенсивном использовании кластера. В данном режиме YTsaurus выделяет ресурсы под внутренний Standalone Spark кластер, который занимается выполнением расчетов. Этот режим рекомендуется использовать в следующих случаях:
- Запуск задач с высокой периодичностью (более 1 раза в час). Эффективность достигается за счет того, что время запуска задачи в standalone кластере существенно меньше, чем время запуска операции в YTsaurus.
- Ad-hoc аналитика в Jupyter-ноутбуках.
- Ad-hoc аналитика с использованием Query tracker и livy.
Для запуска внутреннего standalone Spark кластера необходимо выполнить следующие шаги:
-
Выберите пользователя, от имени которого необходимо запустить кластер. Код, который регулярно запускается на Spark, нужно загрузить в систему YTsaurus. У пользователя, от имени которого запущен кластер, должны быть права на чтение кода.
-
Создайте директорию для служебных данных Spark, например
my_discovery_path
. Пользователь, от имени которого запущен кластер, должен иметь права на запись в директорию. Пользователи, которые будут запускать джобы на Spark, должны иметь права на чтение директории. -
Запустите кластер:
$ spark-launch-yt \ --proxy <cluster-name> \ --pool my_pool \ --discovery-path my_discovery_path \ --worker-cores 16 \ --worker-num 5 \ --worker-memory 64G
Опции:
spark-launch-yt
— запуск в Vanilla-операции YTsaurus с клиентского хоста;--proxy
— имя кластера;--pool
— вычислительный пул YTsaurus;--spyt-version
— директория для служебных данных Spark;--worker-cores
— количество ядер у воркера;--worker-num
— количество воркеров;--worker-memory
— количество памяти у каждого воркера;--spark-cluster-version
— версия кластера (опционально).
-
Запустите тестовый джоб на кластере:
$ spark-submit-yt \ --proxy <cluster-name> \ --discovery-path my_discovery_path \ --deploy-mode cluster \ yt:///sys/spark/examples/smoke_test.py
Опции:
spark-submit-yt
— обертка над spark-submit, позволяет определить адрес мастера Spark из Vanilla-операции. Поиск производится по аргументам:proxy
,id
,discovery-path
;--proxy
— имя кластера;--discovery-path
— директория для служебных данных Spark;--deploy-mode
(cluster
илиclient
) — режим запуска кластера;--spyt-version
— версия SPYT (опционально);- адрес файла с кодом в YTsaurus.
Работа с использованием внутреннего Spark кластера
-
spark-launch-yt
Запуск Spark кластера внутри YTsaurus:
$ spark-launch-yt \ --proxy <cluster-name> \ --pool my_pool \ --discovery-path my_discovery_path \ --worker-cores 16 \ --worker-num 5 \ --worker-memory 64G \ --spyt-version 2.4.0
-
spark-discovery-yt
Получить ссылки на UI мастера, операцию, Spark History Server:
$ spark-discovery-yt \ --proxy <cluster-name> \ --discovery-path my_discovery_path
-
spark-submit-yt
Запуск задач на кластере:
$ spark-submit-yt \ --proxy <cluster-name> \ --discovery-path my_discovery_path \ --deploy-mode cluster \ yt:///sys/spark/examples/smoke_test.py
Примечание
Вместо некоторых аргументов команд можно установить переменные окружения, например:
YT_PROXY
— вместо--proxy
.$ export YT_PROXY=<cluster-name> $ spark-submit-yt \ --discovery-path my_discovery_path \ --deploy-mode cluster \ yt:///sys/spark/examples/smoke_test.py
Дополнительные параметры
О дополнительных параметрах при запуске кластера можно узнать в разделе Запуск кластера Spark.