Создание кластера 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.
-
-
В блоке Сетевые настройки выберите сеть, подсеть и группу безопасности для кластера.
-
Задайте вычислительные ресурсы, на которых будут запускаться Spark-приложения:
-
При необходимости задайте дополнительные настройки кластера:
-
Pip-пакеты и Deb-пакеты — названия pip- и deb-пакетов, чтобы установить в кластер дополнительные библиотеки и приложения.
Чтобы указать более одного пакета, нажмите кнопку Добавить.
Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов. -
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Metastore-сервер — metastore-сервер, подключенный к вашему кластеру.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления.
-
Чтобы использовать сервис для мониторинга приложений Spark History Server
, включите настройку History Server. После создания кластера сервис будет доступен по ссылке. -
Настройте логирование:
- Включите настройку Запись логов.
- Выберите место записи логов:
- Каталог — выберите каталог из списка.
- Группа — выберите лог-группу из списка или создайте новую.
- Выберите Минимальный уровень логирования из списка.
-
-
Нажмите кнопку Создать.
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 = <фиксированное_количество_экземпляров> } } } 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.
- Класс хостов в параметре
-
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": "<максимальное_количество_экземпляров>" } } } }, "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.
-
-
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 -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.