如果 none 个任务失败,Airflow DAG 怎么会失败?

How can an Airflow DAG fail if none of the tasks have failed?

我们有一个很长的 dag(~60 个任务),我们经常看到这个 dag 的 dagrun 处于 failed 状态。当查看 DAG 中的任务时,它们都处于 successnull 状态(即还没有排队)。看来dag过早进入了failed的状态。

在什么情况下会发生这种情况,人们应该如何防范?

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

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

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

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