失败的Airflow DAG任务能否通过更改参数重试

时间:2019-01-16 19:02:59

标签: python pipeline airflow directed-acyclic-graphs

借助Airflow,如果下游任务失败,是否可以重新启动上游任务?这似乎违背了DAG术语的“非循环”部分。我认为这是一个普遍的问题。

背景

我正在考虑使用Airflow来管理已经手动管理的数据处理工作流程。

如果将参数x设置得太高,则有一项任务会失败,但是增大参数值会带来更好的质量结果。我们还没有找到一种计算安全但最大参数x的方法。手动执行的过程是,如果使用较低的参数失败,则重新启动作业,直到工作。

工作流程如下:

任务A-收集原始数据

任务B-为作业生成配置文件

任务C-修改配置文件参数x

任务D-运行数据处理作业

任务E-处理作业结果

任务F-生成报告

问题

如果任务D由于参数x太高而失败,我想重新运行任务C和任务D。似乎不支持此操作。我真的很感谢有关如何处理此问题的指导。

1 个答案:

答案 0 :(得分:0)

首先:这是一个很好的问题,我想知道为什么到目前为止尚未对其进行广泛讨论


我可以想到两种可能的方法

  1. 融合Operators @Kris指出,Combining Operators together似乎是最明显的解决方法

  2. 分隔顶级 DAG s :请阅读以下内容


单独的顶级DAG方法

给予

  • 假设您有任务A和B
  • A在B的上游
  • 如果B失败,您希望从A恢复执行(重试)

(可能的)想法:如果您喜欢冒险

  • 将任务A和B放在单独的顶级 DAG中,例如DAG-A和DAG-B
  • 在DAG-A的末尾,使用TriggerDagRunOperator触发DAG-B
    • 极有可能,您还必须在ExternalTaskSensor之后使用TriggerDagRunOperator
  • 在DAG-B中,使用trigger_rule=all_done在任务B之后放置一个BranchPythonOperator
  • BranchPythonOperator应该分支到另一个TriggerDagRunOperator,然后再调用DAG-A!

有用的参考


EDIT-1

这是实现相似行为的简单得多的方法

How can you re-run upstream task if a downstream task fails in Airflow (using Sub Dags)