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!!!
Dolphin Scheduler秒级别工作流异常处理的更多相关文章
- Apache Dolphin Scheduler - Dockerfile 详解
Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...
- Apache Dolphin Scheduler - Docker Compose 详解
Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...
- Dolphin Scheduler 1.2.0 部署参数分析
本文章经授权转载 1 组件介绍 Apache Dolphin Scheduler是一个分布式易扩展的可视化DAG工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程 ...
- Dolphin Scheduler 1.1.0升级1.2.0避坑指南
本文章经授权转载 组件介绍 Apache Dolphin Scheduler是一个分布式易扩展的可视化DAG工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开 ...
- 对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高不少,并且不受NTP等外部服务影响,能准确更准确来统计耗时(java中对应的是System.nanoTime),也就是说所有使用gettimeofday来统计耗时(java中是System.curre
对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高 ...
- ProjectTool写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift、Objecive-C双语言
这是自动写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 [ 官网下载 ] 这是一个白包目录示例 ProjectToo ...
- 如何在CDH5上部署Dolphin Scheduler 1.3.1
点击蓝色字关注! 本篇文章大概8440字,阅读时间大约20分钟 本文记录了在CDH5.16.2集群上集成Dolphin Scheduler 1.3.1的详细流程,特别注意一下MySQL数据库的连接串! ...
- SQL Server错误严重性级别和异常处理
关于SQL Server的错误严重性级别的说明,强烈认真看一下下面的两个链接 脱机帮助 ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/sqlerrm9/html/ ...
- crontab如何设置秒级别的定时【转载】
* * * * * date > /home/gamester88/test/nihao.txt * * * * * (sleep 10 && date >> /ho ...
随机推荐
- Django-Model随笔
Django数据库之Model 常用命令 生成迁移文件 python manage.py makemigrations 实行数据库迁移 python manage.py migrate 数据库表结构反 ...
- Crane-scheduler:基于真实负载进行调度
作者 邱天,腾讯云高级工程师,负责腾讯云 TKE 动态调度器与重调度器产品. 背景 原生 kubernetes 调度器只能基于资源的 resource request 进行调度,然而 Pod 的真实资 ...
- Eureka高可用集群搭建
就是搭建Eureka的集群. 每个Eureka Server需要相互注册,确保数据一致. 我这里准备两个Eureka Server 他两的POM文件配置是一样的 <dependencies&g ...
- 关于 GIN 的路由树
GIN 是一个 golang 常用的 Web 框架,它对 API 比较友好,源码注释也很明确明确,使用起来快速灵活,还有极高的容错率.标题中的路由我们可以简单理解为在浏览器中输入的页面地址,而&quo ...
- RPA供应链管制单修改机器人
背景:供应链环节中,研发物料时而因为市场缺货等原因无法采购,资材部需登入系统修改物料管制单. 操作流程:登录PDM系统中读取数据.登录ERP系统中更新数据. 人工操作:每日耗时3.5小时,出现一定比例 ...
- UiPath数据抓取Data Scraping的介绍和使用
一.数据抓取(Data Scraping)的介绍 使用截据抓取使您可以将浏览器,应用程序或文档中的结构化数据提取到数据库,.csv文件甚至Excel电子表格中. 二.Data Scraping在UiP ...
- 超 Nice 的表格响应式布局小技巧
今天,遇到了一个很有意思的问题,一名群友问我,仅仅使用 CSS,能否实现这样一种响应式的布局效果: 简单解析一下效果: 在屏幕视口较为宽时,表现为一个整体 Table 的样式 而当屏幕视口宽度较小时, ...
- Python爬取某网站文档数据完整教程(附源码)
基本开发环境 (https://jq.qq.com/?_wv=1027&k=NofUEYzs) Python 3.6 Pycharm 相关模块的使用 (https://jq.qq.com/?_ ...
- docker安装node
#1.拉取镜像 docker pull node:latest #2.运行 docker run -itd --name node-test --restart=always node #--rest ...
- C#.NET笔试题-基础
1.C#中堆和栈的区别? 栈:由编译器自动分配.释放.在函数体中定义的变量通常在栈上. 堆:一般由程序员分配释放.用new.malloc等分配内存函数分配得到的就是在堆上. 存放在栈中时要管存储顺序, ...