Создание кластера Apache Spark™
Каждый кластер Apache Spark™ содержит вычислительные ресурсы, на которых запускаются Spark-приложения.
Роли для создания кластера
Для создания кластера Apache Spark™ вашему аккаунту в Yandex Cloud нужны роли:
- managed-spark.admin — чтобы создать кластер;
- vpc.user — чтобы работать с сетью кластера;
- iam.serviceAccounts.user — чтобы привязать сервисный аккаунт к кластеру.
Сервисному аккаунту кластера должны быть назначены роли managed-spark.integrationProvider и storage.editor. Это даст кластеру нужные права для работы с пользовательскими ресурсами.
О назначении ролей читайте в документации Yandex Identity and Access Management.
Создать кластер
-
В консоли управления
выберите каталог, в котором нужно создать кластер Apache Spark™. -
Перейдите в сервис Managed Service for Apache Spark.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Задайте имя кластера. Имя должно быть уникальным в рамках каталога.
-
(Опционально) Введите описание кластера.
-
(Опционально) Создайте метки:
- Нажмите кнопку Добавить метку.
- Введите метку в формате
ключ: значение. - Нажмите Enter.
-
Выберите существующий сервисный аккаунт или создайте новый.
Сервисному аккаунту должна быть назначена роль
managed-spark.integrationProvider. -
Выберите версию Apache Spark™.
Примечание
После создания кластера вы можете изменить версию Apache Spark™. Версию можно только повысить.
-
-
В блоке Сетевые настройки выберите сеть, подсеть и группу безопасности для кластера.
-
Задайте вычислительные ресурсы, на которых будут запускаться Spark-приложения:
-
При необходимости задайте дополнительные настройки кластера:
-
Pip-пакеты и Deb-пакеты — названия pip- и deb-пакетов, чтобы установить в кластер дополнительные библиотеки и приложения.
Чтобы указать более одного пакета, нажмите кнопку Добавить.
Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов. -
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Metastore-сервер — metastore-сервер, подключенный к вашему кластеру.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления.
-
Чтобы использовать сервис для мониторинга приложений Spark History Server
, включите настройку History Server. После создания кластера сервис будет доступен по ссылке. -
Настройте логирование:
- Включите настройку Запись логов.
- Выберите место записи логов:
- Каталог — выберите каталог из списка.
- Группа — выберите лог-группу из списка или создайте новую.
- Выберите Минимальный уровень логирования из списка.
-
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы создать кластер Apache Spark™:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
yc vpc subnet listЕсли ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.
-
Посмотрите описание команды CLI для создания кластера:
yc managed-spark cluster create --help -
Укажите параметры кластера в команде создания (в примере приведены не все доступные параметры):
yc managed-spark cluster create \ --name <имя_кластера> \ --spark-version <<версия_Apache_Spark>> \ --service-account-id <идентификатор_сервисного_аккаунта> \ --subnet-ids <список_идентификаторов_подсетей> \ --security-group-ids <список_идентификаторов_групп_безопасности> \ --driver-preset-id=<класс_вычислительных_ресурсов_драйвера> \ --driver-fixed-size <количество_хостов_драйвера> \ --executor-preset-id <класс_вычислительных_ресурсов_исполнителя> \ --executor-min-size <минимальное_количество_хостов_исполнителя> \ --executor-max-size <максимальное_количество_хостов_исполнителя> \ --pip-packages <список_pip-пакетов> \ --deb-packages <список_deb-пакетов>\ --history-server-enabled \ --metastore-cluster-id <идентификатор_кластера> \ --deletion-protectionГде:
-
--name— имя кластера. Оно должно быть уникальным в рамках каталога. -
--version— версия Apache Spark™.Примечание
После создания кластера вы можете изменить версию Apache Spark™. Версию можно только повысить.
-
--service-account-id— идентификатор сервисного аккаунта. -
--subnet-ids— список идентификаторов подсетей. -
--security-group-ids— список идентификаторов групп безопасности. -
--driver-preset-id— класс вычислительных ресурсов драйвера. -
--driver-fixed-size— фиксированное количество экземпляров драйвера. -
--driver-min-size— минимальное количество экземпляров драйвера. -
--driver-max-size— максимальное количество экземпляров драйвера.Укажите либо фиксированное количество драйверов, либо минимальное и максимальное количество драйверов для автоматического масштабирования.
-
--executor-preset-id— класс вычислительных ресурсов исполнителя. -
--executor-fixed-size— фиксированное количество экземпляров исполнителя. -
--executor-min-size— минимальное количество экземпляров исполнителя. -
--executor-max-size— максимальное количество экземпляров исполнителя.Укажите либо фиксированное количество исполнителей, либо минимальное и максимальное количество исполнителей для автоматического масштабирования.
-
--pip-packages— список pip-пакетов, который позволяет установить в кластер дополнительные библиотеки и приложения.Формат названия пакета и выбор версии определены командой установки
pip install. -
--deb-packages— список deb-пакетов, который позволяет установить в кластер дополнительные библиотеки и приложения.Формат названия пакета и выбор версии определены командой установки
apt install. -
--history-server-enabled— флаг включения сервера истории. Позволяет использовать сервис для мониторинга приложений Spark History Server. -
--metastore-cluster-id— идентификатор кластера Apache Hive™ Metastore для использования в качестве хранилища метаданных. -
--deletion-protection— защита кластера от непреднамеренного удаления:trueилиfalse.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
-
Чтобы включить отправку логов Apache Spark™ в сервис Yandex Cloud Logging, задайте параметры логирования:
yc managed-spark cluster create <имя_кластера> \ ... --log-enabled \ --log-folder-id <идентификатор_каталога>Где:
-
--log-enabled— включает логирование. -
--log-folder-id— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога. -
--log-group-id— идентификатор пользовательской лог-группы. Логи будут записываться в нее.Укажите либо идентификатор каталога, либо идентификатор пользовательской лог-группы.
-
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), передайте нужное значение в параметре
--maintenance-window:yc managed-spark cluster create <имя_кластера> \ ... --maintenance-window type=<тип_технического_обслуживания>,` `day=<день_недели>,` `hour=<час_дня> \Где
type— тип технического обслуживания:anytime(по умолчанию) — в любое время.weekly— по расписанию. Для этого значения дополнительно укажите:day— день недели:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC: от1до24.
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Yandex Managed Service for Apache Spark™:
-
Опишите в конфигурационном файле создаваемые ресурсы:
-
Кластер Yandex Managed Service for Apache Spark™ — описание кластера.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_spark_cluster" "<имя_кластера>" { description = "<описание_кластера>" name = "<имя_кластера>" folder_id = "<идентификатор_каталога>" service_account_id = "<идентификатор_сервисного_аккаунта>" deletion_protection = <защитить_кластер_от_удаления> labels = { <список_меток> } network = { subnet_ids = ["<список_идентификаторов_подсетей>"] security_group_ids = ["<список_идентификаторов_групп_безопасности>"] } config = { resource_pools = { driver = { resource_preset_id = "<класс_хоста>" size = <фиксированное_количество_экземпляров> } executor = { resource_preset_id = "<класс_хоста>" size = <фиксированное_количество_экземпляров> } } spark_version = "<версия_Apache_Spark>" } logging = { enabled = <включить_логирование> folder_id = "<идентификатор_каталога>" } } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }Где:
-
(Опционально)
description— описание кластера. -
name— имя кластера. -
(Опционально)
folder_id— идентификатор каталога. При отсутствии значения кластер будет размещен в каталоге, указанном в настройках провайдера. -
service_account_id— идентификатор сервисного аккаунта. -
(Опционально)
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse. -
(Опционально)
labels— список меток. Метки задаются в формате<ключ> = "<значение>". -
subnet_ids— список идентификаторов подсетей. -
security_group_ids— список идентификаторов групп безопасности. -
driver— конфигурация хостов для запуска драйверов Apache Spark™. В этом блоке укажите:- Класс хостов в параметре
resource_preset_id. - Количество экземпляров. Укажите фиксированное количество в параметре
sizeили минимальное и максимальное количество для автомасштабирования в параметрахmin_sizeиmax_size.
- Класс хостов в параметре
-
executor— конфигурация хостов для запуска исполнителей Apache Spark™. В этом блоке укажите:- Класс хостов в параметре
resource_preset_id. - Количество экземпляров. Укажите фиксированное количество в параметре
sizeили минимальное и максимальное количество для автомасштабирования в параметрахmin_sizeиmax_size.
- Класс хостов в параметре
-
(Опционально)
spark_version— версия Apache Spark™.Примечание
После создания кластера вы можете изменить версию Apache Spark™. Версию можно только повысить.
-
logging— параметры логирования. Сгенерированные компонентами Apache Spark™ логи будут отправляться в Yandex Cloud Logging. Для включения логирования:-
Установите значение
enabled = true. -
Задайте одно из двух мест хранения логов:
folder_id— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога.log_group_id— идентификатор пользовательской лог-группы. Логи будут записываться в нее.
-
-
-
При необходимости задайте дополнительные настройки:
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window:resource "yandex_spark_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }Где:
type— тип технического обслуживания. Принимает значения:ANYTIME— в любое время.WEEKLY— по расписанию.
day— день недели для типаWEEKLY:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC для типаWEEKLY: от1до24.
-
Чтобы включить сервис Apache Spark™ History Server, добавьте в описание конфигурации кластера блок
history_server:resource "yandex_spark_cluster" "<имя_кластера>" { ... config = { ... history_server = { enabled = true } } } -
Чтобы подключить к вашему кластеру сервер Apache Hive™ Metastore, добавьте в описание конфигурации кластера блок
metastore:resource "yandex_spark_cluster" "<имя_кластера>" { ... config = { ... metastore = { cluster_id = "<идентификатор_кластера_metastore>" } } } -
Чтобы подключить дополнительные deb- и pip-пакеты для запуска заданий Apache Spark™, добавьте в описание конфигурации кластера блок
dependencies:resource "yandex_spark_cluster" "<имя_кластера>" { ... config = { ... dependencies = { deb_packages = ["<список_deb-пакетов>"] pip_packages = ["<список_pip-пакетов>"] } } }Где
deb_packagesиpip_packages— названия пакетов. Их формат определяет команда установки:apt install— для deb-пакетов,pip install— для pip-пакетов.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер Yandex Managed Service for Apache Spark™.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "folder_id": "<идентификатор_каталога>", "name": "<имя_кластера>", "description": "<описание_кластера>", "labels": { <список_меток> }, "config": { "resource_pools": { "driver": { "resource_preset_id": "<идентификатор_ресурсов>", "scale_policy": { "fixed_scale": { "size": "<количество_экземпляров>" } } }, "executor": { "resource_preset_id": "<идентификатор_ресурсов>", "scale_policy": { "auto_scale": { "min_size": "<минимальное_количество_экземпляров>", "max_size": "<максимальное_количество_экземпляров>" } } }, "spark_version": "<версия_Apache_Spark>" }, "history_server": { "enabled": <использование_Apache_Spark_History_Server> }, "dependencies": { "pip_packages": [ <список_pip-пакетов> ], "deb_packages": [ <список_deb-пакетов> ] }, "metastore": { "cluster_id": "<идентификатор_кластера>" } }, "network": { "subnet_ids": [ <список_идентификаторов_подсетей> ], "security_group_ids": [ <список_идентификаторов_групп_безопасности> ] }, "deletion_protection": <защита_от_удаления>, "service_account_id": "<идентификатор_сервисного_аккаунта>", "logging": { "enabled": <использование_логирования>, "folder_id": "<идентификатор_каталога>" } }Где:
-
folder_id— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name— имя кластера. -
description— описание кластера. -
labels— список меток. Метки задаются в формате"<ключ>": "<значение>". -
config— конфигурация кластера:-
resource_pools— конфигурация пулов ресурсов:-
driver— конфигурация хостов для запуска драйверов Apache Spark™.-
resource_preset_id— класс хостов драйвера. -
scale_policy— политика масштабирования групп хостов для драйвера:-
fixed_scale— фиксированная политика масштабирования.size— количество хостов для драйвера.
-
auto_scale— автоматическая политика масштабирования.min_size— минимальное количество хостов для драйвера.max_size— максимальное количество для драйвера.
Укажите один из двух параметров:
fixed_scaleлибоauto_scale.
-
-
-
executor— конфигурация хостов для запуска исполнителей Apache Spark™.-
resource_preset_id— класс хостов исполнителя. -
scale_policy— политика масштабирования групп хостов для исполнителя:-
fixed_scale— фиксированная политика масштабирования.size— количество хостов для исполнителя.
-
auto_scale— автоматическая политика масштабирования.min_size— минимальное количество хостов для исполнителя.max_size— максимальное количество для исполнителя.
Укажите один из двух параметров:
fixed_scaleлибоauto_scale.
-
-
-
-
history_server— параметры сервера истории.enabled— флаг включения сервера истории. Позволяет использовать сервис для мониторинга приложений Spark History Server.
-
dependencies— списки пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения.pip_packages— список pip-пакетов.deb_packages— список deb-пакетов.
Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов. -
metastore— параметры метахранилища.cluster_id— идентификатор кластера Apache Hive™ Metastore.
-
spark_version— версия Apache Spark™.Примечание
После создания кластера вы можете изменить версию Apache Spark™. Версию можно только повысить.
-
-
network— сетевые настройки:subnet_ids— список идентификаторов подсетей.security_group_ids— список идентификаторов групп безопасности.
-
deletion_protection— позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения:trueилиfalse.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
service_account_id— идентификатор сервисного аккаунта. -
logging— параметры логирования:enabled— позволяет включить логирование. Логи, сгенерированные Spark-приложениями, будут отправляться в Yandex Cloud Logging. Возможные значения:trueилиfalse.folder_id— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога.log_group_id— идентификатор пользовательской лог-группы. Логи будут записываться в нее.
Укажите один из двух параметров:
folder_idлибоlog_group_id.
-
-
Воспользуйтесь вызовом ClusterService/Create и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/spark/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ spark.api.yandexcloud.kz:443 \ yandex.cloud.spark.v1.ClusterService.Create \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примеры
Создайте кластер Apache Spark™ с тестовыми характеристиками:
- Имя —
myspark. - Сервисный аккаунт —
ajev56jp96ji********. - Подсеть —
b0rcctk2rvtr********. - Группа безопасности —
enp6saqnq4ie********. - 2 драйвера с классом вычислительных ресурсов —
c2-m16. - 4 исполнителя с классом вычислительных ресурсов —
c2-m16. - Включенный сервер истории.
- Защита от непреднамеренного удаления.
Выполните следующую команду:
yc managed-spark cluster create \
--name myspark \
--service-account-id ajev56jp96ji******** \
--subnet-ids b0rcctk2rvtr******** \
--security-group-ids enp6saqnq4ie******** \
--driver-preset-id c2-m16 \
--driver-fixed-size 2 \
--executor-preset-id c2-m16 \
--executor-fixed-size 4 \
--history-server-enabled \
--deletion-protection
Создайте кластер Apache Spark™ и сеть для него с тестовыми характеристиками:
- Имя —
myspark. - Сервисный аккаунт —
ajev56jp96ji********. - Сеть —
msp-network. - Подсеть —
msp-subnet. Зона доступности подсети —ru-central1-a, диапазон —10.1.0.0/16. - 2 драйвера с классом вычислительных ресурсов —
c2-m16. - 4 исполнителя с классом вычислительных ресурсов —
c2-m16. - Включенный сервер истории.
- Защита от непреднамеренного удаления.
- Отключенное логирование.
Конфигурационный файл для такого кластера выглядит так:
resource "yandex_spark_cluster" "myspark" {
name = "myspark"
service_account_id = "ajev56jp96ji********"
deletion_protection = true
network = {
subnet_ids = [yandex_vpc_subnet.msp-subnet.id]
}
config = {
resource_pools = {
driver = {
resource_preset_id = "c2-m16"
size = 2
}
executor = {
resource_preset_id = "c2-m16"
size = 4
}
}
history_server = {
enabled = true
}
}
logging = {
enabled = false
}
}
resource "yandex_vpc_network" "msp-network" {
name = "msp-network"
}
resource "yandex_vpc_subnet" "msp-subnet" {
name = "msp-subnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.msp-network.id
v4_cidr_blocks = ["10.1.0.0/16"]
}