当我取消暂停任务时,如何停止 Apache Airflow 第一次运行该任务?

raa*_*aaj 6 cron airflow airflow-scheduler

我有一个DAG。这是参数示例。

\n
dag = DAG(\n    \'My Dag\',\n    default_args=default_args,\n    description=\'Cron Job : My Dag\',\n    schedule_interval=\'45 07 * * *\',\n    # start_date=days_ago(0),\n    start_date = datetime(2021, 4, 6, 10, 45),\n    tags=[\'My Dag Tag\'],\n    concurrency = 1,\n    is_paused_upon_creation=True,\n    catchup=False # Don\xe2\x80\x99t run previous and backfill; run only latest\n)\n
Run Code Online (Sandbox Code Playgroud)\n

阅读 Apache Airflow 的文档,我想我已将 DAG 设置为每天 7:45 运行。但是,如果我暂停 DAG 并在几天后取消暂停,那么一旦我取消暂停(当然是当天),它仍然会运行,因为 catch=False 可以避免回填。

\n

这不是预期的行为,对吧?

\n

我的意思是,我安排在 7 点 45 分。当我在 10:00 取消暂停时,它应该在下一个 7:45 之前根本不会运行。

\n

我在这里缺少什么?

\n

Ela*_*lad 4

我想你已经熟悉Airflow的调度机制了。如果不是这种情况,请先阅读Apache Airflow 中的开始日期和计划日期问题,然后再阅读答案的其余部分。

至于你的情况:

部署 DAG 时,您按预期运行了一次/多次。您在某个时刻暂停了 DAG 2021-04-07,今天 ( 2021-04-19) 您取消了它。然后 Airflow 使用 执行 DAG 运行execution_date='2021-04-18'

这是预料之中的。

究其原因,是基于Airflow的调度机制。

您上次跑步的2021-04-07时间为45 07 * * *(每天 07:45)。2021-04-08, 2021-04-09, ... , 2021-04-17由于您暂停了 DAG,因此从未创建过运行。当您取消暂停 DAG 时,Airflow 不会创建这些运行,因为catchup=False,但是,今天的运行 ( 2021-04-19) 不是追赶的一部分。它被安排是因为间隔of execution_date=2021-04-18已达到其结束周期,因此开始运行。

您遇到的行为与部署这个新的 DAG 没有什么不同:

from airflow.operators.dummy_operator import DummyOperator
default_args = {
    'owner': 'airflow',
    'start_date': datetime(2020, 1, 1),

}
with DAG(dag_id='stackoverflow_question',
         default_args=default_args,
         schedule_interval='45 07 * * *',
         catchup=False
         ) as dag:
    DummyOperator(task_id='some_task')
Run Code Online (Sandbox Code Playgroud)

一旦部署它,就会创建一个运行:

在此输入图像描述

在此输入图像描述

DAGstart_date带有.2020-01-01catchup=False我今天部署了 DAG ( 19/Apr/2021),因此它创建了一个执行日期 ='2021-04-18' 的运行,并于今天开始运行,2021-04-19

  • @raaj 这就是气流的工作原理。未来将会改变 AIP-39 Richer Scheduler_interval 已被接受并正在进行中。https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-39+Richer+scheduler_interval (2认同)