Как запустить Airflow DAG для определенного количества раз? - PullRequest
0 голосов
/ 14 декабря 2018

Как запустить Dag воздушного потока для указанного количества раз?

Я пытался использовать TriggerDagRunOperator, этот оператор работает для меня.В вызываемой функции мы можем проверять состояния и принимать решение о продолжении или нет.

Однако текущий счет и состояния необходимо поддерживать.

Используя вышеописанный подход, я могу повторить DAG 'run'.

Нужно мнение эксперта. Есть ли какой-нибудь другой способ запустить Airflow DAG несколько раз?Спасибо.

1 Ответ

0 голосов
/ 18 декабря 2018

Боюсь, что Airflow ПОЛНОСТЬЮ связан с планированием на основе времени.
Вы можете установить расписание на None, а затем использовать API для запуска прогонов , но вы это сделаетевнешне, и, таким образом, поддерживая количество и состояния, определяющие, когда и почему следует запускать извне.

Когда вы говорите, что у вашей группы обеспечения доступности баз данных может быть 5 задач, выполнение которых вы хотите выполнить 10 раз, а запуск занимает 2 часа, а вы не можетепланировать это на основе времени, это сбивает с толку.Мы понятия не имеем, что для вас значит 2 часа, или почему это должно быть 10 запусков, и почему вы не можете запланировать выполнение этих 5 задач один раз в день.При простом ежедневном расписании он будет запускаться один раз в день примерно в одно и то же время, и не имеет значения, что в любой день это займет чуть больше 2 часов.Правильно?

Вы можете установить start_date на 11 дней назад (хотя фиксированная дата не устанавливается динамически) и end_date на сегодня (также фиксированное значение), а затем добавить ежедневную schedule_interval и max_active_runs из 1, и вы получите ровно 10 прогонов, и он будет запускать их спина к спине без наложения, при этом соответственно изменяя execution_date, затем остановится.Или вы можете просто использовать airflow backfill с None запланированной группой обеспечения доступности баз данных и диапазоном времени выполнения.

Вы хотите сказать, что хотите, чтобы он работал непрерывно каждые 2 часа, но иногда он будет работать дольше иВы не хотите, чтобы это перекрывало пробеги?Что ж, вы определенно можете запланировать его запуск каждые 2 часа (0 0/2 * * *) и установить для max_active_runs значение 1, чтобы, если предыдущий запуск не завершился, следующий цикл ожидал, а затем стартует после завершения предыдущего.,См. Последний пункт в https://airflow.apache.org/faq.html#why-isn-t-my-task-getting-scheduled.

Если вы хотите, чтобы ваша группа обеспечения доступности баз данных работала ровно каждые 2 часа на точке [дайте или возьмите некоторую задержку планировщика, да, это так], и оставьте предыдущий запуск в рабочем состоянии, этов основном это поведение по умолчанию, но вы можете добавить depends_on_past к некоторым важным задачам, которые сами не должны выполняться одновременно (например, создание, вставка или удаление временной таблицы), или использовать пул с одним слотом.

Нет функции убить предыдущий запуск, если ваш следующий график готов к запуску.Возможно, можно пропустить текущий прогон, если предыдущий еще не завершен, но я забываю, как именно это делается.

Это в основном большинство ваших вариантов.Также вы можете создать руководство dag_run s для внеплановой DAG;создавая 10 в то время, когда вы чувствуете, что хотите (используя интерфейс или CLI вместо API, но API может быть проще).

Есть ли какие-либо из этих предложений для решения ваших проблем?Поскольку непонятно, зачем вам нужно фиксированное количество прогонов, как часто или с каким расписанием и условиями, сложно дать конкретные рекомендации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...