气流将长时间运行的任务标记为失败

Posted

技术标签:

【中文标题】气流将长时间运行的任务标记为失败【英文标题】:Airflow marking long running tasks as Failed 【发布时间】:2020-11-14 10:49:27 【问题描述】:

我们在几个 DAG 中有几个长时间运行的任务(超过 100 小时)。这些任务在内部调用一个 http 端点来启动一个进程,然后在一个循环中轮询状态 + 睡眠 30 秒。大约 40 小时左右后,Airflow 将作业标记为失败,但日志中没有说明原因 - 为任务运行打印的最后一项是“睡眠 30 秒”语句”。触发的 http 进程也是启动并运行。

提前致谢

【问题讨论】:

问题已解决 - 我们的 Openshift pod 由于部署导致工作人员、调度程序和网络服务器退出而重新启动。感谢大家的投入 你是怎么解决的?我也有类似的问题:***.com/questions/63141944/… 【参考方案1】:

如果您的目标是等到状态发生变化,请使用带有重新调度功能的传感器(可能需要更长的轮询等待时间)。您的方法可能会阻止工作人员,并且以某种方式阻止工作人员与调度程序失去通信。这些任务将被标记为僵尸并可能被杀死。

【讨论】:

是的,我同意我们可能不得不改变方法,但我认为在这种情况下它不能回答我的问题。另外值得注意的是,任务被标记为失败,但为任务定义的 on_kill 方法没有被调用。 检查worker配置是否因为某种原因导致这个任务的进程被杀死。它可以是内存或其他任何东西。

以上是关于气流将长时间运行的任务标记为失败的主要内容,如果未能解决你的问题,请参考以下文章

很长时间后运行 gradle 任务失败

如果任何任务失败,气流回填将停止

通过将长时间运行的任务拆分为单独的进程来提高程序性能

带有异步或长时间运行任务的 UndoManager

长时间运行的操作失败,状态为“失败”。附加信息:'指定的 sku 'ElasticPool' 无效。'

通过将长时间运行的任务分成单独的进程来提高程序性能