Запуск PySpark-задания в Yandex Managed Service for YTsaurus
В кластере YTsaurus вы можете запускать Spark- и PySpark-задания с помощью скрипта spark-submit. Он сохраняет результаты расчета в HDFS. Подробнее о spark-submit читайте в документации Spark
Ниже рассматривается пример запуска приложения на языке программирования Python
Чтобы запустить PySpark-задание:
- Подготовьте инфраструктуру.
- Подготовьте ВМ к работе.
- Подготовьте тестовые данные.
- Создайте и запустите PySpark-задание.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
- Кластер YTsaurus: использование вычислительных ресурсов компонентов кластера и объем хранилища (см. тарифы YTsaurus).
- Виртуальная машина: использование вычислительных ресурсов, хранилища, публичного IP-адреса и операционной системы (см. тарифы Compute Cloud).
Перед началом работы
Подготовьте инфраструктуру:
-
Создайте сервисный аккаунт
ytsaurus-saс рольюmanaged-ytsaurus.editor. -
Создайте сеть с именем
ytsaurus-network. При создании выключите опцию Создать подсети. -
В сети
ytsaurus-networkсоздайте подсеть со следующими параметрами:- Имя —
ytsaurus-subnet-a. - Зона доступности —
ru-central1-a. - CIDR —
10.1.0.0/16.
- Имя —
-
В сети
ytsaurus-networkсоздайте группы безопасности:-
Для виртуальной машины — с именем
vm-security-groupи правилами, разрешающими входящий трафик по протоколу TCP на порт 22 со всех адресов и исходящий трафик на все порты и адреса. -
Для кластера YTsaurus — с именем
ytsaurus-security-groupи правилом, разрешающим входящий трафик на все порты со всех адресов.
-
-
Создайте виртуальную машину
vm-ubuntu-24-04со следующими параметрами:- Операционная система —
Ubuntu 24.04. - Зона доступности —
ru-central1-a. - Подсеть —
ytsaurus-subnet-a. - Группа безопасности —
vm-security-group. - Сервисный аккаунт —
ytsaurus-sa.
- Операционная система —
-
Создайте кластер YTsaurus с настройками:
- Тип кластера —
Demo-кластер. - Имя кластера —
ytsaurus-cluster. - Зона доступности —
ru-central1-a. - Подсеть —
ytsaurus-subnet-a. - Группа безопасности —
ytsaurus-security-group.
- Тип кластера —
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации ytsaurus-for-spark-jobs.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группы безопасности;
- сервисный аккаунт для работы с ресурсами кластера;
- виртуальная машина;
- кластер YTsaurus.
-
Укажите в файле конфигурации
ytsaurus-for-spark-jobs.tfнеобходимые параметры. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте ВМ к работе
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
-
Установите зависимости:
sudo apt update && sudo apt install -y python3 python3-pip python3-venv -
Создайте и активируйте виртуальное окружение для выполнения Python-скрипта:
python3 -m venv .venv/yt312 && \ source .venv/yt312/bin/activate -
Установите Java:
sudo apt install -y openjdk-11-jdk -
Установите YTsaurus CLI:
pip install ytsaurus-client -
Создайте IAM-токен:
yc iam create-token -
Получите идентификатор сервисного аккаунта:
yc iam whoami -
Задайте переменные окружения:
export YT_PROXY=http://hp.<идентификатор_кластера_YTsaurus>.ytsaurus.mdb.yandexcloud.net:32100 ; \ export YT_TOKEN=<IAM-токен> ; \ export YT_USER=<идентификатор_сервисного_аккаунта> -
Получите версию SPYT:
yt list //home/spark/conf/releasesРезультат:
2.7.0 -
Установите пакет
ytsaurus-spytтой же версии, что и SPYT:pip install ytsaurus-spyt==2.7.0 -
Получите версию Spark из названия tgz-файла:
yt find //home/spark/distrib --name *tgzРезультат:
//home/spark/distrib/3/5/6/spark-3.5.6-bin-hadoop3.tgz -
Установите
pysparkтой же версии, что и дистрибутивspark:pip install pyspark==3.5.6 -
Активируйте конфигурацию SPYT:
source spyt-envРезультат:
SPYT environment has been successfully activated -
Проверьте значение переменной
$SPARK_CONF_DIR:echo $SPARK_CONF_DIRРезультат:
/home/<домашняя_директория>/.venv/yt312/lib/python3.12/site-packages/spyt/conf
Подготовьте тестовые данные
На виртуальной машине выполните команды:
-
Создайте таблицу
table1в YTsaurus:yt create table //tmp/table1 \ --attributes '{schema = [{name = id; type = int64}; {name = text; type = string}]}' -
Запишите данные в таблицу:
echo '{ "id": 0, "text": "Hello" } { "id": 1, "text": "World!" }' | yt write-table //tmp/table1 --format json
Создайте и запустите PySpark-задание
На виртуальной машине выполните действия:
-
Создайте файл
spark-job.pyс PySpark-заданием.import spyt from pyspark import SparkConf conf = SparkConf() conf.set("spark.app.name","Show table") with spyt.direct_spark_session("http-proxies-lb.yt.svc.cluster.local", conf) as spark: spark.read.yt('//tmp/table1').show() -
Запустите задание:
spark-submit --master "ytsaurus://${YT_PROXY}" \ --deploy-mode cluster \ --num-executors 1 \ --conf spark.hadoop.yt.proxyNetworkName=external \ --queue research \ ./spark-job.pyРезультат:
... 25/12/09 23:29:49 INFO YTsaurusClusterApplication: Operation: fdff4aa2-d11767f6-e03e8-6affdd7c, State: running 25/12/09 23:30:23 INFO YTsaurusClusterApplication: Operation: fdff4aa2-d11767f6-e03e8-6affdd7c, State: completed
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-