如何批量杀死 Apache DolphinScheduler 运行中的工作流?
关键词: 大数据、数据调度、工作流、批量停止
整体说明
在调研了 DolphinScheduler 之后,在项目上实际使用了一段时间,遇到了任务过多僵死的问题,解决思路分享如下。

问题背景
任务依赖很多:从下图可以看出,有些任务的后续依赖很多,一旦失败,后续任务都得等待。这样就很容易导致后续任务被堵死。

循环任务很多,有很多任务本身是循环调用的其他任务的任务,会不停生成任务,循环任务本身也是任务,这就有可能导致任务堵死。

问题现象
就是很多任务,都在运行中的状态,但是就是不执行,因为他们占用了各自任务组的上限,导致卡死。当任务积累到一定程度,手工去杀死,太慢了,而且真的很累。
问题分析
我们现在就是要杀死这些任务,但是有一些要注意的点:
任务是全量任务,杀死不丢失数据: 只有全量任务,今天才能随意的去杀死,如果是增量的,就需要手工单独处理
下游任务今日不生成数据,不影响展示结果:下游的任务,或者说给客户展示的数据,这种高风险数据,不会因为今天的任务被杀死,而影响展示效果,数据一天不更新,不影响最终结果
解决方案
调用 API 批量杀死工作流:DolphinScheduler 是自带了很多的 API 接口的,可以批量新建或者停止工作流
Python 脚本:所以写了个脚本来完成这个事
脚本名称:dolpschedule-kill.py
脚本执行
执行效果
每个任务返回 200 ,说明执行任务成功

最终解决
最终,僵死的工作流全部被我杀死了,不过有时候会有一些僵死的任务实例(不是工作流)存在,这个没法用接口杀死。只能在后台修改,可以看我之前的文章 《DolphinScheduler 6 个高频 SQL 操作技巧》 解决无法被杀死的僵死任务实例。
原文链接:https://blog.csdn.net/pengpenhhh/article/details/149134569
评论