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

时间:2018-06-02 15:35:47

标签: airflow airflow-scheduler

我们有一个很长的dag(约60个任务),我们经常看到这个dag的dagrun状态为failed。在查看DAG中的任务时,它们都处于successnull状态(即,甚至尚未排队)。似乎dag已经过早地进入状态failed

在什么情况下会发生这种情况,以及人们应采取什么措施来防范呢?

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

2 个答案:

答案 0 :(得分:1)

你能为这个dag发布你的args以及它的一些示例任务吗?

查看失败DAG的日志:

  1. 转到您的网络服务器,然后点击顶栏上的DAGs
  2. 找到失败的DAG,然后查看DAG Runs列。
  3. 点击红色失败的dag运行符号,将其加载到包含所有失败dag列表的页面中。
  4. 选择您要查看的失败DAG,然后选择超链接Dag Id
  5. 您现在处于失败的dag的图表视图中。查看不同的任务,看看是否有任何设置为nullfailed。单击要调查的任务,然后在以下弹出窗口中单击View Log

答案 1 :(得分:1)

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

这在调度程序内部运行,同时考虑是否需要安排新的dag_run。如果它发现另一个运行时间超过DAG的dagrun_timeout参数的活动运行,那么它将被终止。据我所知,这并没有记录在任何地方,所以诊断这个的最好方法是查看DAG开始的时间和最后一个任务完成的时间,看它是否大致是长度为dagrun_timeout

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