如果没有任何任务失败,Airflow DAG 怎么会失败?

Sli*_*eam 4 airflow airflow-scheduler

我们有一个很长的 dag(约 60 个任务),而且我们经常看到此 dag 的 dagrun 处于failed. 当查看 DAG 中的任务时,它们都处于“success或”状态null(即甚至还没有排队)。看来dag已经进入了failed过早的状态。

在什么情况下会发生这种情况,人们应该采取什么措施来防止这种情况发生?

如果它对上下文有帮助,我们将使用 Celery 执行器运行 Airflow,并且当前在 1.9.0 版上运行。如果我们将有问题的 dag 的状态设置回,running那么所有任务(以及整个 dag)都会成功完成。

Sli*_*eam 7

DAG 可以在没有任务失败的情况下失败的唯一方法是通过与任何任务无关的东西。除了手动干预(检查团队中是否没有人手动使 dag 失败!)除了考虑任务状态之外,唯一使 DAG 失败的是超时检查器。

这在调度程序内部运行,同时考虑是否需要调度一个新的dag_run. 如果它发现另一个活动运行时间比dagrun_timeoutDAG的参数长,那么它就会被杀死。据我所知,这并没有记录在任何地方,所以诊断这个问题的最好方法是查看 DAG 开始的时间和最后一个任务完成的时间,看看它的长度是否大致等于dagrun_timeout.

您可以在此处查看正在运行的代码:https : //github.com/apache/incubator-airflow/blob/e9f3fdc52cb53f3ac3e9721e5128d17d1c5c418c/airflow/jobs.py#L800