前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dolphin Scheduler秒级别工作流异常处理

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

作者头像
Fayson
发布2020-03-10 17:57:58
5.8K0
发布2020-03-10 17:57:58
举报
文章被收录于专栏:Hadoop实操

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表积累了多少数据,如果没有必要,删除
  • 将所有的流程实例和任务实例的状态都变为终态
代码语言:javascript
复制
#将流程和任务实例的状态都变为终态
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上积压的数据
代码语言:javascript
复制
#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
代码语言:javascript
复制
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表达式的限制代码,毕竟本事大不如不耽着嘛

!!!

代码语言:javascript
复制
欢迎试用Dolphin Scheduler-1.2.1!!!
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DS如何执行一个工作流
  • 秒级任务应对操作
  • 开发环境搭建
  • 代码修改
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档