Скрипты инициализации
При создании кластера вы можете указать скрипты инициализации хостов. Это может быть полезно для автоматической установки или обновления ПО, необходимого для запуска заданий. Каждый скрипт будет выполнен от имени суперпользователя root
только один раз при первом запуске хоста.
В первой строке файла скрипта укажите полный путь к интерпретатору, например, #!/bin/sh
или #!/usr/bin/python
.
URI скрипта может быть задан в схемах https://
, http://
, hdfs://
и s3a://
. Для s3a://
требуется выполнение хотя бы одного из условий:
- ACL бакета должен разрешать сервисному аккаунту кластера операции чтения.
- Сервисному аккаунту кластера должна быть присвоена роль
storage.viewer
. - Доступ к бакету должен быть публичным.
Переменные окружения
Для использования в скриптах инициализации доступны следующие переменные окружения:
CLUSTER_ID
— идентификатор кластера.S3_BUCKET
— имя привязанного бакета Yandex Object Storage.ROLE
— роль хоста (masternode
,computenode
илиdatanode
).CLUSTER_SERVICES
— список компонентов.MAX_WORKER_COUNT
— максимальное количество хостов подкластеров для хранения и обработки данных.MIN_WORKER_COUNT
— минимальное количество хостов подкластеров для хранения и обработки данных.
Например, чтобы выполнить часть скрипта только на хосте-мастере (masternode
), используйте проверку значения переменной окружения ROLE
:
if [[ "${ROLE}" == "masternode" ]]; then
...
fi
Ошибки скриптов инициализации
Если выполнение скрипта завершилось ошибкой и кластер перешел в состояние DEAD
:
-
Посмотрите логи в Yandex Cloud Logging или на хостах кластера в файле
/var/log/yandex/dataproc-init-actions.log
. -
Исправьте ошибку.
Если ошибки скриптов инициализации произошли на уже созданном кластере (например, во время добавления подкластера), а пересоздание кластера нарушает рабочие процессы, результат выполнения скрипта можно исправить вручную:
-
Подключитесь к проблемному хосту и выполните действия, необходимые для компенсации ошибки.
-
Запустите скрипт, который помечает успешным результат выполнения скриптов инициализации:
sudo /opt/yandex/complete_init_action.py
-
Проверьте результат выполнения скриптов инициализации в файле
/home/dataproc-agent/dataproc-init-acts/states.json
на хосте-мастере.
Ошибки синтаксиса
Чтобы проверить скрипт на наличие ошибок синтаксиса, загрузите файл скрипта вручную и запустите его:
-
Подключитесь к хосту кластера.
-
Загрузите файл скрипта из хранилища по ссылке, использованной при создании кластера. Например:
wget <HTTP-ссылка_на_файл_скрипта>
-
Запустите скрипт.
Если при выполнении скрипта возникли ошибки, сообщения о них отобразятся в консоли.
Одной из причин ошибок скриптов инициализации может быть несовместимость формата. Так как среда выполнения скрипта — Linux (Ubuntu), то скрипты, подготовленные в Windows, могут выполниться с ошибкой ^M: bad interpreter
из-за использования символа переноса строки CR/LF
(в Linux – LF
). Для исправления выполните команду:
sed -i -e 's/\r$//' <имя_файла_скрипта>
$file = "<имя_файла_скрипта>"; $text = [IO.File]::ReadAllText($file) -replace "`r`n", "`n"; [IO.File]::WriteAllText($file, $text)