1 现象
在DolphinScheduler所在的host中查看,实际上执行的任务已经停止,但是前端并未更新任务实例的状态,依然显示为“正在运行”。
2 解决办法
去存储DolphinScheduler元数据的MySQL中手动修改该任务实例的状态。
官方元数据文档
https://dolphinscheduler.apache.org/zh-cn/docs/1.3.6/metadata-1.3
这个表保存任务实例的信息
t_ds_task_instance
字段 | 类型 | 注释 |
---|---|---|
id | int | 主键 |
name | varchar | 任务名称 |
process_instance_id | int | 流程实例id |
state | tinyint | 任务实例状态:0 提交成功,1 正在运行,2 准备暂停,3 暂停,4 准备停止,5 停止,6 失败,7 成功,8 需要容错,9 kill,10 等待线程,11 等待依赖完成 |
首先找到状态卡住的任务实例
SELECT * FROM `t_ds_task_instance` WHERE `status` = 1
如果有多个正在运行的任务实例,根据启动时间来判断具体是哪个。通过筛选其id执行SQL。
手动将状态改为失败或停止。
UPDATE `t_ds_task_instance` SET state = 6 WHERE `id` = '2465747';
操作之后可以在前端看到任务实例状态已变为失败或停止。对应的工作流实例也会变为失败或停止。
3 错误的解决办法
之前参考的是:https://blog.csdn.net/Lzx116/article/details/128189897
他是修改的这个表t_ds_process_instance
此表为工作流实例的元数据表,而不是任务实例的元数据表。
修改完之后去前端看工作流实例的状态会变为“正在运行”,点击“停止”按钮后依然会卡在“正在停止”。我猜测工作流实例的状态是检测任务实例的状态判断的,所以单纯修改工作流实例的状态不能达到目的。需要修改更基本的任务实例的状态。