Dolphin Scheduler秒级别工作流异常处理

本文章经授权转载

1

组件介绍

Apache Dolphin Scheduler是一个分布式易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。

官网:

https://dolphinscheduler.apache.org/en-us/

github:

https://github.com/apache/incubator-dolphinscheduler

2

问题描述

在dolphinscheduler-1.1.0中,流程定时的操作中,默认的crontab秒位是*(在1.2.0的版本中,crontab的默认值秒位和分钟位均默认位0),如果开发小伙伴手滑非常容易提交上去一个每秒执行的工作流。这个手滑的操作会提交大量工作流到ds上,导致zk上的任务队列积压,导致调度系统紊乱甚至GG。

为啥要整理这个问题呢?因为我司曾在生产环境翻过车,社区也有几位小伙伴遇到过同样的问题。下面给出解决方案:

  • ds出现秒级调度任务的处理流程

  • 10行代码,在ds的前端做crontab表达式限制的魔改方案

3

秒级调度任务的处理流程

DS如何执行一个工作流

ds中工作流执行的简化流程图

  • command对应t_escheduler_command表

  • 1.2.0-command对应t_ds_command表

  • master扫描线程获取command,进行dag切分,然后将task到zk上的task队列

  • task队列的znode是/escheduler/tasks_queue

  • 1.2.0对应/dolphinscheduler/tasks_queue

  • worker Fetch线程从task队列中拉取task进行执行

秒级任务应对操作

(感谢ds社区@乔占卫提供解决思路!!!)

  • 停止秒级别的定时任务,下线

  • 将ds的服务暂时停掉

    • 运行ds安装目录/bin/stop_all.sh

  • 查看t_escheduler_command表积累了多少数据,如果没有必要,删除

  • 将所有的流程实例和任务实例的状态都变为终态

#将流程和任务实例的状态都变为终态
SELECT * FROM t_escheduler_process_instance WHERE state = 0
#查询出来执行delete操作
SELECT * FROM t_escheduler_process_instance WHERE state = 1
#state状态=1的可以保留也可以删除,保留就将其状态变为6,失败状态,
#然后把对应的task_instance非终态的任务也置为6
#建议直接干掉
  • 删除zk上任务队列znode上积压的数据

#ds-1.1.0
delete /escheduler/tasks_queue

#ds-1.2.0
delete /dolphinscheduler/tasks_queue
  • 重启ds的所有服务

4

魔改前端-限制Crontab

开发环境搭建
  • 安装node v8.9.4

  • webstorm

  • clone ds 代码

  • 前端开发文档

    • https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/frontend-development.html

代码修改
  • src/js/conf/home/pages/projects/pages/definition/list/_source/timing.vue

let crontabExp = this.crontab.split(" ")
let second = crontabExp[0]
let minutes = crontabExp[1]

if (second === '*' || minutes === '*') {
  this.$message.warning('$(i18n.$t('Crontab Exp Second/Minutes is eq *'))')
  return false
}
  • 将Crontab Exp Second/Minutes is eq *添加到en_US.js和zh_CN.js中

  • 效果验证

    • npm run build, 将生成的dist文件夹覆盖nginx上的前端资源文件

    • 自从把crontab表达式限制之后,秒级任务这种刺激的事情再也没出现过!!!

小结

在ds的1.1.0版本中(现在生产环境应该大多数是1.1.0),开发的时候手滑很容易造成的工作流秒提交问题,如果不小心容易造成生产事故(去年我被搞了两次)crontab的默认值的秒位和分钟位已经在ds-1.2.0中改为了0, 这个问题的出现概率低了很多。建议在ds的web端加异常crontab表达式的限制代码,毕竟本事大不如不耽着嘛!!!


欢迎试用Dolphin Scheduler-1.2.1!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值