如何防止追赶DAG?

jac*_*ack 1 airflow

我有以下DAG:

default_args = {
    'owner': 'Airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 07, 19, 11,0,0),
    'email': ['me@me.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 5,
    'retry_delay': timedelta(minutes=2),
    'catchup' : False,
    'depends_on_past' : False,
}


with DAG('some_dag', schedule_interval=timedelta(minutes=30), max_active_runs=1, default_args=default_args) as dag:
Run Code Online (Sandbox Code Playgroud)

该dag每30分钟运行一次。它重写表中的数据(全部删除并写入)。因此,如果气流中断了2天,那么在此期间运行所有丢失的dag运行就没有意义了。

但是,以上定义不起作用。气流停止两天后,它仍然尝试运行所有丢失的任务。

我该如何解决?

jac*_*ack 8

好的。我解决了。显然有是没有意义'catchup' : Falsedefault_args。它什么都不做。我把代码改成

default_args = {
    'owner': 'Airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 07, 19, 11,0,0),
    'email': ['me@me.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 5,
    'retry_delay': timedelta(minutes=2),
    'depends_on_past' : False,
}


with DAG('some_dag', catchup=False, schedule_interval=timedelta(minutes=30), max_active_runs=1, default_args=default_args) as dag:
Run Code Online (Sandbox Code Playgroud)

现在它起作用了。


sko*_*ozz 7

根据文档:https : //airflow.apache.org/scheduler.html#backfill-and-catchup

  • 添加dag.catchup = False到DAG参数。
  • 添加catchup_by_default = Falseairflow.cfg

取决于您的用例,可以设置一种良好的做法catchup_by_default = False,然后仅dag.catchup = True在给定的DAG需要补充时才使用。