
点亮⭐️
https://github.com/apache/
点击蓝字 关注我们
问题描述
在DolphinScheduler运行过程中,有时会出现任务界面显示"运行中"状态,但实际进程已经死亡的情况。这种状态不一致会导致工作流无法正常推进,需要手动干预。本文将针对不同版本提供安全清理方案。
问题原因分析
任务卡在"运行中"状态通常由以下原因造成:
旧版本处理方式(1.2.1以下)
对于1.2.1之前的版本,需要手动执行以下步骤:
# 清空ZooKeeper中的任务队列路径delete /dolphinscheduler/task_queue
这一步确保卡住的任务不会继续阻塞队列。
通过数据库直接更新任务实例状态:
-- 将卡住的任务状态改为失败(状态码6)UPDATE t_ds_task_instanceSET state = 6WHERE state = 1 AND task_instance_id = <卡住的任务ID>;
状态码说明:
在DolphinScheduler UI中:
新版本处理方式(1.2.1+)
从1.2.1版本开始,系统引入了自动容错机制,大部分情况无需手动干预。
新版本的容错设计基于ZooKeeper的Watcher机制:

当Worker节点发生remove事件时:
新版本使用状态机管理任务生命周期,包括暂停和杀死操作:
// 任务杀死事件处理public void onKilledEvent(...) {releaseTaskInstanceResourcesIfNeeded(taskExecutionRunnable);persistentTaskInstanceKilledEventToDB(taskExecutionRunnable, taskInstanceKillEvent);taskExecutionRunnable.getWorkflowExecutionGraph().markTaskExecutionRunnableChainKill(taskExecutionRunnable);publishWorkflowInstanceTopologyLogicalTransitionEvent(taskExecutionRunnable);}
版本对比总结
安全清理最佳实践
在执行清理前,先确认任务确实已死:
# 检查Worker进程jps | grep WorkerServer# 检查任务进程ps -ef | grep <任务相关关键词># 查看任务日志tail -f /path/to/task.log
对于新版本,优先使用UI提供的操作:
如果必须直接操作数据库:
清理ZooKeeper节点时:
/dolphinscheduler/task_queue为减少此类问题发生:
总结
对于DolphinScheduler中卡在"运行中"的任务,处理方式因版本而异:
建议升级到最新版本以获得更好的容错能力,同时建立完善的监控体系,及时发现和处理异常情况。
Notes
本文基于DolphinScheduler官方FAQ和架构设计文档编写,相关代码实现可参考AbstractTaskStateAction.java中的状态处理逻辑。对于生产环境,建议在测试环境验证操作步骤后再执行。
END

用户案例

迁移实战

最新发版消息

加入社区
关注社区的方式有很多:
同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。
非代码方式包括:
完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。
代码方式包括:
查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。


你的好友小海豚拍了拍你
并请你帮她点一下“分享”
