重新运行Airflow子DAG的部分

15
我有一个包含子DAG的日常DAG。子DAG有五个任务T1到T5,必须按顺序运行(例如T1 >> T2 >> T3 >> T4 >> T5)。
DAG成功运行了几天,但我发现T4有一个bug。我修复了这个问题,想要重新运行之前所有天的T4和T5。重要的是不要重新运行T1-T3,因为这些步骤比T4-T5花费更长时间。
我尝试过的失败方法:
  1. 选择T4,清除下游+递归 - 没有任何反应。Dag树视图显示子DAG为“成功”,即使其中的T4和T5被清除。
  2. 选择T4,清除下游+递归,选择子DAG,仅清除该任务 - 这将重新运行整个子DAG(T1-T5),即使T1-T3已标记为成功
  3. 选择T4,清除下游+递归,选择子DAG,点击运行 - 与#2相同。重新运行整个子DAG。
  4. 选择T4,清除下游+递归,手动将子DAG设置为“正在运行”状态。没有任何反应。树视图显示子DAG处于“运行”状态,但实际上没有任务被运行。
当尝试重新运行子DAG的一部分时,似乎只有这个问题。如果我在一个普通的DAG中有一堆任务,通常选择中间的任务并选择清除下游+递归将重新运行该DAG。
如有建议,将不胜感激。

我认为#2应该做你想要的事情。你正在运行哪个版本的Airflow?AIRFLOW-1124应该已经解决了在回填中每个任务都被重新调度的问题,并适用于1.8.1+版本。 - Daniel Huang
v1.8.0 - 我计划尽快升级Airflow到1.9,希望能够解决这个问题。感谢您的回复。 - stipe108
1
似乎1.9也不行。 - Freedom
你尝试过第四种方法,但是否将父DAG运行设置为正在运行的状态?我认为这应该使得已经被清除的SubDAG任务重新运行,而不会重新运行已经完成的任务。 - Taylor D. Edmiston
@TaylorEdmiston 是的,我已经确保父DAG被标记为正在运行。实际上,只需清除单个任务或子DAG任务就会自动将父DAG置于运行状态。此外,我已经升级到1.9,但这对我仍然没有用。我已经停止在所有流程中完全使用SubDags。 - stipe108
感谢确认。您是否已经能够针对Airflow主分支测试您的DAG代码,以查看它是否可行?如果您可以使用DAG/SubDAG代码的MCVE更新您的问题,我们可以帮助进一步排除故障。 - Taylor D. Edmiston
2个回答

16

您可以在子图中重新启动失败的任务,方法如下:

  • 缩小到子DAG中,清除失败任务的状态。
  • 返回主DAG,选择子DAG。
  • 取消勾选递归和/或下游。
  • 清除子DAG的状态。

在几乎相同的设置下,已在Airflow 1.9中进行了测试,这应该是对这个问题的可接受答案。 - enmyj

0
我使用这个命令成功地运行了一个子DAG,希望能对某些人有所帮助:
airflow backfill dag_name.subdag_name -s 2018-05-31 -e 2018-05-31 --reset_dagruns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接