Airflow Dag故障回调被多次调用

时间:2020-09-01 15:49:00

标签: python airflow

我多次调用on_failure_callback功能时遇到问题。

当前,我的主要 Dag 分为1个 PythonOperator 和4个 SubDag ,每个 SubDag 包含多个 PythonOperator

t_python_1 >> t_subdag_2 >> t_subdag_3 >> t_subdag_4 >> t_subdag_5

__t_subdag_2__:
t_sub2_python_1 >> t_sub2_python_2 t_sub2_python_3

...

在设置过程中,我在主 Dag default_args 中添加了一个on_failure_callback选项。对于每个 SubDag ,我将其设置为None

Args主Dag

DEFAULT_ARGS_MAINDAG = {
    "owner"               : "airflow",
    "depends_on_past"     : False,
    "start_date"          : days_ago(2),
    "retries"             : 2,
    "retry_delay"         : timedelta(seconds=30),
    "on_failure_callback" : custom_failure_handle,
}

Args SubDag

DEFAULT_ARGS_SUBDAG = {
    "owner"               : "airflow",
    "depends_on_past"     : False,
    "start_date"          : days_ago(2),
    "retries"             : 2,
    "retry_delay"         : timedelta(seconds=30),
    "on_failure_callback" : None,
}

但是当我运行 Dag 并检查任务时,似乎每个子subdag的任务都将on_failure_callback设置为 custom_failure_handle 而不是None 。 因此,在执行过程中,如果 SubDag 任务失败,则on_failure_callback被调用两次:在主 Dag SubDag 中。 / p>

是否可以为父 Dag SubDag 分别配置,以确保不会两次调用失败回调?

1 个答案:

答案 0 :(得分:0)

因此问题不在Airflow上,而是在我实现的服务中为我的SubDag创建 default_args 的服务。基本上,SubDag default_args 总是被主要的Dag参数覆盖。

您当然可以通过与常规SubDag相同的方式为每个Dag传递不同的配置。