Запуск пайплайна в Vanilla-операции
Это самый простой способ запустить Flow: отдельный долгоживущий деплой контроллеров и воркеров не нужен — они поднимаются внутри одной YTsaurus vanilla-операции. Чтобы включить такой запуск, достаточно дописать в pipeline.yson блок vanilla.
Что потребуется
Конфигурационный файл:
pipeline.yson— runner config со спекой пайплайна. Чтобы пайплайн запустился в vanilla-операции, в нём должен быть блокvanillaсenable = %true(см. Как включить). Отдельныйconfig.ysonне нужен — node config внутри джоб строится автоматически.
И бинари — их роли зависят от языка:
pipeline— ваш бинарь пайплайна. Он же являетсяflow_server(черезTSimpleRunnerProgram) и работает контроллером, воркером и раннером.
pipeline— лёгкий Python-бинарь: лаунчер + компаньон.flow_server— серверный бинарь Flow (yt/yt/flow/bin/flow_server), работающий контроллером и воркером; путь к нему передаётся раннеру через--flow-binили переменную окруженияYT_FLOW_BIN. Компаньон доставляется в джобу автоматически. Не задавайтеentrypointв параметрах ресурса компаньона: заданныйexecutable, отличный от./py_companion, раннер сохраняет как есть и считает, что компаньон уже есть в окружении джобы.
run.sh— скрипт запуска Java jar и компаньона; первым аргументом принимает полное имя главного класса.flow_server— серверный бинарь Flow (yt/yt/flow/bin/flow_server), работающий контроллером и воркером; путь к нему передаётся раннеру через--flow-binили переменную окруженияYT_FLOW_BIN. Компаньон доставляется в джобу автоматически. Не задавайтеclasspathв параметрах ресурса компаньона: заданныйclasspathраннер сохраняет как есть и считает, что jar-файлы уже есть в окружении джобы.
pipeline— Go-бинарь: лаунчер + компаньон.flow_server— серверный бинарь Flow (yt/yt/flow/bin/flow_server), работающий контроллером и воркером; путь к нему передаётся раннеру через--flow-binили переменную окруженияYT_FLOW_BIN. Компаньон доставляется в джобу автоматически. Не задавайтеentrypointв параметрах ресурса компаньона: заданныйexecutable, отличный от./go_companion, раннер сохраняет как есть и считает, что компаньон уже есть в окружении джобы.
Как включить
Добавьте в конфиг пайплайна блок vanilla:
"vanilla" = {
"enable" = %true;
"pool" = "<ваш-пул>";
"worker" = {"count" = 5};
};
Обязательные параметры — pool и worker.count. Остальные поля имеют разумные значения по умолчанию: контроллер — одна джоба, каждая джоба (и контроллера, и воркера) получает cpu_limit = 6 и memory_limit = 18 GiB. Порты джобы при запуске без сетевого проекта по умолчанию запрашиваются у YTsaurus — фиксированные порты соседних джоб на хосте с общей сетью конфликтовали бы; в сетевом проекте у каждой джобы свой IP, и фиксированные порты rpc_port = 10080, monitoring_port = 10081 и companion.port = 10082 используются, если раннер не запрашивает порты для джобы. Подробнее — в Дополнительных параметрах.
При необходимости ресурсы переопределяются явно:
"vanilla" = {
"enable" = %true;
"pool" = "<ваш-пул>";
"controller" = {"count" = 1; "cpu_limit" = 2; "memory_limit" = "8g"};
"worker" = {"count" = 5; "cpu_limit" = 8; "memory_limit" = "32g"};
};
Полный список полей — в TVanillaConfig и TVanillaTaskConfig.
При запуске flow_server сам валидирует спеку, создаёт vanilla-операцию с двумя задачами (controller и worker), устанавливает спеку пайплайна и стартует его.
Дополнительные параметры
Реже используемые поля блока vanilla:
|
Параметр |
Описание |
|
|
RPC-роль прокси для |
|
|
Файловый кеш YTsaurus, в который загружаются файлы джоб (общий для всех flow-операций кластера). Непустой, по умолчанию |
И поля задач (controller/worker):
|
Параметр |
Описание |
|
|
Cypress-пути porto-слоёв, монтируемых в корневую файловую систему задачи. Непустой список хотя бы у одной задачи включает porto-джобы для всей операции |
|
|
Базовый OS-слой задачи; переопределяет системный слой по умолчанию |
|
|
Запрашивает ограничение CPU контейнера значением |
|
|
Сколько портов задача запрашивает у YTsaurus вместо фиксированных. Без сетевого проекта — по умолчанию 2 у контроллера и 3 у воркера; |
На хосте с общей сетью фиксированные порты соседних джоб столкнулись бы — там порты нужно запросить у YTsaurus полем port_count задачи. Именно поэтому при запуске без сетевого проекта поле заполняется автоматически: port_count = 2 у контроллера и port_count = 3 у воркера; явное значение 0 возвращает фиксированные порты, если компаньонский раннер не увеличивает worker.port_count. Выданные порты приходят в переменных окружения YT_PORT_<i> и имеют приоритет над конфигом: YT_PORT_0 — rpc_port (и bus_server.port), YT_PORT_1 — monitoring_port, YT_PORT_2 — companion.port. Контроллеру и воркеру без компаньона достаточно двух портов, воркеру с компаньоном нужны три; при меньшем значении часть портов останется фиксированной и снова может конфликтовать.
Компаньонские раннеры на Go и Python устанавливают worker.port_count не меньше 3, когда Vanilla включена, даже если поле не задано или явно равно 0. Порты этих воркеров выделяются и при наличии сетевого проекта; для контроллера действуют правила выше.
Запуск пайплайна
./pipeline --config pipeline.yson
./pipeline --config pipeline.yson --flow-bin flow_server
./run.sh com.example.pipeline.PipelineMain --config pipeline.yson --flow-bin flow_server
./pipeline --config pipeline.yson --flow-bin flow_server
После старта раннер по умолчанию (YT_FLOW_WAIT=1) ждёт, пока пайплайн не перейдёт в состояние completed, и всё это время печатает новые записи публичного лога контроллера — те, что появились с момента начала ожидания; более ранние не выводятся. Раннер можно прервать — на запущенную операцию это не повлияет. С YT_FLOW_WAIT=0 раннер завершается сразу после запуска.
Только валидация спеки
Раннеры C++ и Java поддерживают --validate-only: они локально разбирают и проверяют статическую и динамическую спеки, не отправляя их контроллеру. Если спека невалидна, раннер завершится с ошибкой; иначе — успешно. Раннеры Python и Go не передают этот флаг в flow_server, поэтому вместо проверки могут запустить или обновить пайплайн. Ниже приведена команда для C++-раннера.
./pipeline --config pipeline.yson --validate-only