Разница между последним единственным оператором и задержкой в ​​Airflow - PullRequest
1 голос
/ 16 апреля 2020

Как видно из заголовка, нужно понять разницу между catchup = False в определении знака и последним единственным оператором.

https://airflow.apache.org/docs/stable/scheduler.html https://airflow.apache.org/docs/stable/_modules/airflow/operators/latest_only_operator.html

1 Ответ

1 голос
/ 16 апреля 2020

Ну, я бы сказал, это совершенно разные понятия, и их можно использовать независимо. Это правда, что они оба могут быть использованы для предотвращения обратной засыпки, но если это ваша единственная задача, тогда просто используйте catchup=False. Цитируя этот ответ одного из разработчиков Airflow, на самом деле кажется очевидным, что хорошей практикой является использование этого:

Как автор LatestOnlyOperator, целью было в качестве временного промежутка до захвата = Ложь приземлилась.

Но затем он продолжает говорить, что LatestOnlyOperator следует считать устаревшим. Я не согласен (как пользователь catchup=False и LatestOnlyOperator), и я постараюсь объяснить. Моя интуиция этих двух понятий такова:


Catchup = True

В определении DAG (т.е. когда вы указываете default_args) вы можете установить флаг catchup до True. Если для этого флага установлено значение True, а для DAG установлено значение ON, то планировщик будет создавать прогоны DAG для каждого интервала расписания от start_date до «настоящего» и будет выполнять их последовательно. Цитируя документацию :

Если бы вместо значения dag.catchup было True, планировщик создал бы прогон DAG для каждого завершенного интервала между 2015-12-01 и 2016-01-02 (но еще не для 2016-01-02, поскольку этот интервал еще не завершен), и планировщик выполнит их последовательно.


LatestOnlyOperator

A LatestOnlyOperator является расширением BaseOperator. Задачи, выполняемые с помощью этого оператора, не будут выполняться (т.е. будут пропущены, а также будут пропущены последующие), если запуск группы DAG не находится в последнем интервале расписания (то есть «последнем запуске»). Также цитирование из строки документа LatestOnlyOperator:

"""
Allows a workflow to skip tasks that are not running during the most
recent schedule interval.

If the task is run outside of the latest schedule interval, all
directly downstream tasks will be skipped.

Note that downstream tasks are never skipped if the given DAG_Run is
marked as externally triggered.
"""

Заключение

Вы можете определить запланированный DAG с помощью catchup=True и использовать LatestOnlyOperator для убедитесь, что некоторые задачи не будут выполнены во время прогонов. Более того, LatestOnlyOperator можно использовать, если вы хотите перезапустить некоторые прошлые прогоны DAG (например, очистив их в пользовательском интерфейсе), но у вас есть некоторые задачи (например, отправка уведомлений), которые вы хотели бы пропустить во время этих перезапусков .

...