[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for Apache Spark™](../index.md) > [Пошаговые инструкции](index.md) > Кластеры > Изменение кластера

# Изменение кластера Apache Spark™

После создания кластера вы можете изменить его основные и дополнительные настройки.

{% list tabs group=instructions %}

- Консоль управления {#console}

    Чтобы изменить настройки кластера:

    1. Перейдите на [страницу каталога](https://kz.console.yandex.cloud).
    1. Перейдите в сервис **Managed Service for Apache Spark**.

    1. Выберите кластер и нажмите кнопку **Редактировать** на панели сверху.

    1. В блоке **Базовые параметры**:
       * Измените имя и описание кластера.
       * Удалите или добавьте новые [метки](../../resource-manager/concepts/labels.md).
       * Выберите сервисный аккаунт или [создайте новый](../../iam/operations/sa/create.md#create-sa) с ролью  `managed-spark.integrationProvider`. Это даст кластеру нужные права для работы с другими ресурсами.

    1. В блоке **Сетевые настройки** выберите [группу безопасности](../../vpc/concepts/security-groups.md) для сетевого трафика кластера.

    1. В блоках **Конфигурация драйвера** и **Конфигурация исполнителя** укажите количество экземпляров и [конфигурацию вычислительных ресурсов](../concepts/instance-types.md). Количество экземпляров может быть фиксированным или автомасштабируемым.

    1. В блоке **Дополнительные настройки**:

        1. Удалите или добавьте названия pip- и deb-пакетов.

           Формат названия пакета и выбор версии определены командой установки: `pip install` — для pip-пакетов, `apt install` — для deb-пакетов.
        1. В настройке **Обслуживание** измените время [технического обслуживания](../concepts/maintenance.md) кластера:

           * Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт **В любое время** (по умолчанию).
           * Чтобы указать предпочтительное время начала обслуживания, выберите пункт **По расписанию** и укажите день недели и интервал времени по UTC. Например, можно выбрать время, когда кластер наименее загружен.
           
           Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление версии Apache Spark™, применение патчей и т. д.

        1. Выберите кластер [Apache Hive™ Metastore](../../metadata-hub/concepts/metastore.md) для подключения в качестве хранилища метаданных.
        1. Установите или снимите защиту от удаления кластера.
        1. Включите или выключите **History Server**. Опция позволяет использовать сервис для мониторинга приложений [Spark History Server](https://spark.apache.org/docs/latest/monitoring.html).
        1. Включите или выключите **Запись логов**. Опция включает логирование Spark-приложений в кластере:
            1. Выберите место записи логов:
                * **Каталог** — выберите каталог из списка.
                * **Группа** — выберите [лог-группу](../../logging/concepts/log-group.md) из списка или создайте новую.
            1. Выберите **Минимальный уровень логирования** из списка.

    1. Нажмите кнопку **Сохранить**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы изменить настройки кластера:

    1. Посмотрите описание команды CLI для изменения кластера:

        ```bash
        yc managed-spark cluster update --help
        ```

    2. Передайте список настроек, которые хотите изменить, в команде изменения кластера:

        ```bash
        yc managed-spark cluster update <имя_или_идентификатор_кластера> \
          --new-name <имя_кластера> \
          --description <описание_кластера> \
          --labels <список_меток> \
          --service-account-id <идентификатор_сервисного_аккаунта> \
          --security-group-ids <список_идентификаторов_групп_безопасности> \
          --driver-preset-id <идентификатор_ресурсов_драйвера> \
          --driver-fixed-size <количество_экземпляров_драйвера> \
          --executor-preset-id <идентификатор_ресурсов_исполнителя> \
          --executor-fixed-size <количество_экземпляров_исполнителя> \
          --history-server-enabled <использовать_Spark_History_Server> \
          --metastore-cluster-id <идентификатор_кластера_Apache_Hive™_Metastore> \
          --pip-packages <список_pip-пакетов> \
          --deb-packages <список_deb-пакетов> \
          --log-enabled \
          --log-folder-id <идентификатор_каталога> \
          --maintenance-window type=<тип_технического_обслуживания>,`
                               `day=<день_недели>,`
                               `hour=<порядковый_номер_часового_интервала> \
          --deletion-protection
        ```

        Где:

        * `--new-name` — уникальное имя кластера в рамках облака.
        * `--description` — описание кластера.
        * `--labels` — список меток. Метки задаются в формате `<ключ>=<значение>`.
        * `--service-account-id` — идентификатор сервисного аккаунта для доступа к сервисам Yandex Cloud. Сервисному аккаунту должна быть назначена роль `managed-spark.integrationProvider`.
        * `--security-group-ids`— список идентификаторов групп безопасности.

        * Конфигурация хостов для запуска драйверов Apache Spark™:

            * `--driver-preset-id` — [класс хостов](../concepts/instance-types.md) драйвера.
            * `--driver-fixed-size` — фиксированное количество хостов для драйвера.
            * `--driver-min-size` — минимальное количество хостов для драйвера при автоматическом масштабировании.
            * `--driver-max-size` — максимальное количество хостов для драйвера при автоматическом масштабировании.

            Укажите либо фиксированное количество хостов (`--driver-fixed-size`), либо минимальное и максимальное количество хостов (`--driver-min-size`, `--driver-max-size`) для автоматического масштабирования.

        * Конфигурация хостов для запуска исполнителей Apache Spark™:

            * `--executor-preset-id` — [класс хостов](../concepts/instance-types.md) исполнителя.
            * `--executor-fixed-size` — фиксированное количество хостов для исполнителя.
            * `--executor-min-size` — минимальное количество хостов для исполнителя при автоматическом масштабировании.
            * `--executor-max-size` — максимальное количество хостов для исполнителя при автоматическом масштабировании.

            Укажите либо фиксированное количество хостов (`--executor-fixed-size`), либо минимальное и максимальное количество хостов (`--executor-min-size`, `--executor-max-size`) для автоматического масштабирования.

        * `--history-server-enabled` — подключает сервис для мониторинга приложений [Spark History Server](https://spark.apache.org/docs/latest/monitoring.html).
        * `--metastore-cluster-id` — идентификатор кластера Apache Hive™ Metastore. Эта настройка подключает хранилище метаданных [Apache Hive™ Metastore](../../metadata-hub/concepts/metastore.md).

        * Списки пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения:

            * `--pip-packages` — список pip-пакетов.
            * `--deb-packages` — список deb-пакетов.

            При необходимости задайте ограничения на версии устанавливаемых пакетов, например:

            ```bash
            --pip-packages pandas==2.1.1,scikit-learn>=1.0.0,clickhouse-driver~=0.2.0
            ```

            Формат названия пакета и выбор версии определены командой установки: `pip install` — для pip-пакетов, `apt install` — для deb-пакетов.

        * Параметры логирования:

            * `--log-enabled` — включает логирование.
            * `--log-folder-id` — идентификатор каталога. Логи будут записываться в [лог-группу](../../logging/concepts/log-group.md) по умолчанию для этого каталога.
            * `--log-group-id` — идентификатор пользовательской лог-группы. Логи будут записываться в нее.

            Укажите один из двух параметров: `--log-folder-id` или `--log-group-id`.

        * `--maintenance-window` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров), где `type` — тип технического обслуживания:

            * `anytime` (по умолчанию) — в любое время.
            * `weekly` — по расписанию. Для этого значения дополнительно укажите:
                * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
                * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.
            
                  > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

        * `--deletion-protection` — включает защиту кластера от непреднамеренного удаления.

            Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.

        Имя и идентификатор кластера можно получить со [списком кластеров](cluster-list.md#list-clusters) в каталоге.

- Terraform {#tf}

    Чтобы изменить настройки кластера:

    1. Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.

        Инструкция по созданию файла описана в разделе [Создание кластера](cluster-create.md).

    1. Чтобы изменить настройки кластера, измените значения нужных полей в конфигурационном файле.

        {% note alert %}

        Не изменяйте имя кластера с помощью Terraform. Это приведет к удалению существующего кластера и созданию нового.

        {% endnote %}

        Пример структуры конфигурационного файла:

        ```hcl
        resource "yandex_spark_cluster" "my_spark_cluster" {
          description         = "<описание_кластера>"
          name                = "my-spark-cluster"
          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               = <фиксированное_количество_экземпляров>
              }
            }
            history_server = {
              enabled = <использование_Spark_History_Server>
            } 
            metastore = {
              cluster_id = "<идентификатор_кластера_Apache_Hive™_Metastore>"
            }
            dependencies = {
              deb_packages = ["<список_deb-пакетов>"]
              pip_packages = ["<список_pip-пакетов>"]
            }
          }

          maintenance_window = {
            type = "<тип_технического_обслуживания>"
            day  = "<день_недели>"
            hour = "<порядковый_номер_часового_интервала>"
          }

          logging = {
            enabled      = <включить_логирование>
            folder_id    = "<идентификатор_каталога>"
          }

        }
        ```

        Где:

        * `description` — описание кластера.
        * `service_account_id` — идентификатор сервисного аккаунта.
        * `deletion_protection` — защита кластера от непреднамеренного удаления: `true` или `false`.
        * `labels` — список меток. Метки задаются в формате `<ключ> = "<значение>"`.
        * `security_group_ids` — список идентификаторов групп безопасности.
        * `driver` — конфигурация хостов для запуска драйверов Apache Spark™. В этом блоке укажите:

          * [Класс хостов](../concepts/instance-types.md) в параметре `resource_preset_id`.
          * Количество экземпляров. Укажите фиксированное количество в параметре `size` или минимальное и максимальное количество для автомасштабирования в параметрах `min_size` и `max_size`.

        * `executor` — конфигурация хостов для запуска исполнителей Apache Spark™. В этом блоке укажите:

          * [Класс хостов](../concepts/instance-types.md) в параметре `resource_preset_id`.
          * Количество экземпляров. Укажите фиксированное количество в параметре `size` или минимальное и максимальное количество для автомасштабирования в параметрах `min_size` и `max_size`.

        * `maintenance_window` – параметры [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров). В этом блоке укажите:

          * `type` — тип технического обслуживания. Принимает значения:
            * `ANYTIME` — в любое время.
            * `WEEKLY` — по расписанию.
          * `day` — день недели для типа `WEEKLY`: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
          * `hour` — порядковый номер часового интервала по UTC для типа `WEEKLY`: от `1` до `24`.

            > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

        * `history_server` — подключение сервиса Apache Spark™ History Server. Для использования сервиса укажите `true` в параметре `enabled`.

        * `metastore` — подключение хранилища метаданных [Apache Hive™ Metastore](../../metadata-hub/concepts/metastore.md). Укажите идентификатор кластера Apache Hive™ Metastore в параметре `cluster_id`.

        * `dependencies` — дополнительные deb- и pip-пакеты для запуска заданий Apache Spark™. В этом блоке укажите:
          * `deb_packages` — названия deb-пакетов. Их формат определяет команда установки `apt install`.
          * `pip_packages` — названия pip-пакетов. Их формат определяет команда установки `pip install`.

        * `logging` — параметры логирования. Сгенерированные компонентами Apache Spark™ логи будут отправляться в Yandex Cloud Logging. Для включения логирования:

          * Установите значение `enabled = true`.
          * Задайте одно из двух мест хранения логов:

             * `folder_id` — идентификатор каталога. Логи будут записываться в [лог-группу](../../logging/concepts/log-group.md) по умолчанию для этого каталога.
             * `log_group_id` — идентификатор пользовательской лог-группы. Логи будут записываться в нее.

    1. Проверьте корректность настроек.

        1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
        1. Выполните команду:
        
           ```bash
           terraform validate
           ```
        
           Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    1. Подтвердите изменение ресурсов.

        1. Выполните команду для просмотра планируемых изменений:
        
           ```bash
           terraform plan
           ```
        
           Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
        
        1. Если вас устраивают планируемые изменения, внесите их:
           1. Выполните команду:
        
              ```bash
              terraform apply
              ```
        
           1. Подтвердите изменение ресурсов.
           1. Дождитесь завершения операции.

    Подробнее в [документации провайдера Terraform](../../terraform/resources/airflow_cluster.md).

- gRPC API {#grpc-api}

    Чтобы изменить настройки кластера:

    1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

        ```bash
        export IAM_TOKEN="<IAM-токен>"
        ```

    1. Клонируйте репозиторий [cloudapi](https://github.com/yandex-cloud/cloudapi):
       
       ```bash
       cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
       ```
       
       Далее предполагается, что содержимое репозитория находится в директории `~/cloudapi/`.

    1. Создайте файл `body.json` и добавьте в него следующее содержимое:

        ```json
        {
          "cluster_id": "<идентификатор_кластера>",
          "update_mask": "<список_изменяемых_параметров>",
          "name": "<имя_кластера>",
          "description": "<описание_кластера>",
          "labels": { <список_меток> },
          "config_spec": {
           "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": <использование_Spark_History_Server>
           },
            "dependencies": {
              "pip_packages": [ <список_pip-пакетов> ],
              "deb_packages": [ <список_deb-пакетов> ]
            },
            "metastore": {
              "cluster_id": "<идентификатор_кластера_Apache_Hive™_Metastore>"
            }
          },
          "network_spec": {
            "security_group_ids": [ <список_идентификаторов_групп_безопасности> ]
          },
          "deletion_protection": <защита_от_удаления>,
          "service_account_id": "<идентификатор_сервисного_аккаунта>",
          "logging": {
            "enabled": <использование_логирования>,
            "log_group_id": "<идентификатор_лог_группы>",
            "folder_id": "<идентификатор_каталога>"
          },
          "maintenance_window": {
            "weekly_maintenance_window": {
              "day": "<день_недели>",
              "hour": "<порядковый_номер_часового_интервала>"
            }
          }
        }
        ```

        Где:

        * `cluster_id` — идентификатор кластера. Его можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).
        * `update_mask` — перечень изменяемых параметров в виде массива строк `paths[]`.

            {% cut "Формат перечисления настроек" %}

            ```yaml
            "update_mask": {
                "paths": [
                    "<настройка_1>",
                    "<настройка_2>",
                    ...
                    "<настройка_N>"
                ]
            }
            ```

            {% endcut %}

            {% note warning %}

            Все параметры изменяемого кластера, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре `update_mask`.

            {% endnote %}

        * `name` — имя кластера.
        * `description` — описание кластера.
        * `labels` — список меток. Метки задаются в формате `"<ключ>": "<значение>"`.
        * `config_spec` — конфигурация кластера:

           * `resource_pools` — конфигурация пулов ресурсов:

               * `driver` — конфигурация хостов для запуска драйверов Apache Spark™.

                   * `resource_preset_id` — [класс хостов](../concepts/instance-types.md) драйвера.
                   * `scale_policy` — политика масштабирования групп хостов для драйвера:
                       * `fixed_scale` — фиксированная политика масштабирования.

                          * `size` — количество хостов для драйвера.

                       * `auto_scale` — автоматическая политика масштабирования.

                           * `min_size` — минимальное количество хостов для драйвера.
                           * `max_size` — максимальное количество хостов для драйвера.

                       Укажите один из двух параметров: `fixed_scale` либо `auto_scale`.

               * `executor` — конфигурация хостов для запуска исполнителей Apache Spark™.

                   * `resource_preset_id` — [класс хостов](../concepts/instance-types.md) исполнителя.
                   * `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-пакетов.

                   При необходимости задайте ограничения на версии устанавливаемых пакетов, например:

                   ```bash
                   "dependencies": {
                     "pip_packages": [
                       "pandas==2.1.1",
                       "scikit-learn>=1.0.0",
                       "clickhouse-driver~=0.2.0"
                     ]
                   }
                   ```

                   Формат названия пакета и выбор версии определены командой установки: `pip install` — для pip-пакетов, `apt install` — для deb-пакетов.

               * `metastore` — параметры хранилища метаданных кластера.

                   * `cluster_id` — идентификатор кластера [Apache Hive™ Metastore](../../metadata-hub/concepts/metastore.md).

           * `network` — сетевые настройки:

               * `security_group_ids` — список идентификаторов [групп безопасности](../../vpc/concepts/security-groups.md).

           * `deletion_protection` — позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения: `true` или `false`.

              Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.

           * `service_account_id` — идентификатор сервисного аккаунта для доступа к сервисам Yandex Cloud. Сервисному аккаунту должна быть назначена роль `managed-spark.integrationProvider`.

           * `logging` — параметры логирования:
               * `enabled` — позволяет включить логирование. Возможные значения: `true` или `false`. Логи, сгенерированные компонентами Apache Spark™, будут отправляться в Yandex Cloud Logging. Возможные значения: `true` или `false`.
               * `folder_id` — идентификатор каталога. Логи будут записываться в [лог-группу](../../logging/concepts/log-group.md) по умолчанию для этого каталога.
               * `log_group_id` — идентификатор пользовательской лог-группы. Логи будут записываться в нее.

               Укажите один из двух параметров: `folder_id` либо `log_group_id`.

           * `maintenance_window` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров). Передайте один из двух параметров:

               * `anytime` — техническое обслуживание проводится в любое время.
               * `weekly_maintenance_window` — техническое обслуживание проводится раз в неделю в указанное время:

                   * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
                   * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.

                     > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.
                     
    1. Воспользуйтесь вызовом [ClusterService.Update](../api-ref/grpc/Cluster/update.md) и выполните запрос, например с помощью [gRPCurl](https://github.com/fullstorydev/grpcurl):

        ```bash
        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.Update \
            < body.json
        ```

    1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/grpc/Cluster/create.md#yandex.cloud.operation.Operation).

{% endlist %}