我有以下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:
此dag每30分钟运行一次。它重写表中的数据(全部删除并写入)。因此,如果Airflow中断了2天,那么在这段时间内运行所有丢失的dag运行就没有意义了。
但是,以上定义不起作用。气流停止两天后,它仍然尝试运行所有丢失的任务。
我该如何解决?
答案 0 :(得分:4)
根据文档:https://airflow.apache.org/scheduler.html#backfill-and-catchup
dag.catchup = False
添加到DAG参数。 catchup_by_default = False
添加到airflow.cfg
根据您的用例,可以设置一个catchup_by_default = False
的好习惯,然后仅在给定的DAG需要进行补充时才使用dag.catchup = True
。
答案 1 :(得分:1)
好。我解决了
显然'catchup' : False
上的default_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:
现在可以了。