触发直联任务失败的 Airflow 错误处理任务触发规则

标签 airflow

我有一个如图所示的 Airflow 任务管道。 task1_error_handler & task2_error_handler是错误处理任务,只有在直接链接的任务失败时才应该运行。我已经为这些任务设置了 ONE_FAILED 触发规则。但似乎在 task1 上出错触发两个错误处理程序。我只需要触发task1_error_handler .
所有任务都是自定义操作符和以 status 结尾的任务 ID是定制传感器。
我应该如何实现这一目标? enter image description here

最佳答案

task1 上的错误导致两个错误处理程序都发生,因为 task2位于 task1 的下游, 制作 task1任务的父级 task2 .

您的触发规则是 ONE_FAILED对于两者 task1task2 ,这会导致问题,因为 ONE_FAILED 的定义是:

fires as soon as at least one parent has failed, it does not wait for all parents to be done



话虽如此,您只需要 task1_error_handler如果 task1 触发失败。不幸的是,这不能通过更改触发规则轻松完成,因为您无法像当前那样直接链接条件任务。

您最好的选择是:
  • 保持 task1 原样并删除 task2的错误处理程序触发规则,而是使用 on_failure_callback调用错误处理程序。
  • 将 task2 拆分为单独的 DAG。
  • 关于触发直联任务失败的 Airflow 错误处理任务触发规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55069155/

    相关文章:

    airflow - 如何杀死 Airflow 调度程序和网络服务器?

    jar - Airflow 支持 jar 文件吗?

    Airflow 网络服务器没有响应(一些工作人员似乎已经死了,gunicorn 没有按预期重启它们)

    airflow - 如何动态嵌套 Airflow DAG?

    python - 如何从谷歌云 Composer 调用云功能?

    python - 使用数据库信息构建动态 DAG

    airflow - 如何解码 Airflow 表 dag_run 列 conf 值

    python - Airflow 任务中不允许使用 multiprocessing.Pool 吗? - 断言错误 : daemonic processes are not allowed to have children

    python - 在 Apache Airflow 的自定义运算符中访问 params 参数

    airflow - 如何检查任务 1 是否失败然后在 Airflow 中运行任务 2?