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. m e s s a g e . w a r n i n g ( ′ message.warning(' 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表达式限制之后,秒级任务这种刺激的事情再也没出现过!!!
本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文出处及转载信息见文内详细说明,如有侵权,请联系 guomm10000@163.com 删除。
本文转载连接:https://cloud.tencent.com/developer/article/1596504

以下是使用DolphinScheduler API创建工作流的步骤: 1.登录DolphinScheduler并获取到登录凭证token。 2.创建工作流定义,包括工作流名称、描述、版本号、租户ID等信息。请求示例: ```shell POST /dolphinscheduler/projects/{projectName}/processes HTTP/1.1 Host: dolphinscheduler-server-host:port Content-Type: application/json Authorization: Bearer token { "processDefinition": { "name": "test_workflow", "description": "test_workflow_description", "locations": [ { "name": "shell" } ], "tasks": [ { "name": "task_1", "description": "task_1_description", "type": "SHELL", "params": { "rawScript": "echo 'hello world'" }, "preTasks": [], "postTasks": [] }, { "name": "task_2", "description": "task_2_description", "type": "SHELL", "params": { "rawScript": "echo 'hello world'" }, "preTasks": [ { "name": "task_1", "type": "SHELL" } ], "postTasks": [] }, { "name": "task_3", "description": "task_3_description", "type": "SHELL", "params": { "rawScript": "echo 'hello world'" }, "preTasks": [ { "name": "task_2", "type": "SHELL" } ], "postTasks": [] } ], "timeout": { "strategy": "FAILED", "interval": 1, "enable": false }, "tenantId": 1, "receivers": "", "receiversCc": "", "warningType": "NONE", "processInstancePriority": "MEDIUM", "workerGroupId": -1, "timeoutFlag": false, "taskRetryTimes": 0, "retryInterval": 1, "runFlag": "NORMAL", "dependence": { "relation": "AND", "dependTaskList": [] }, "globalParams": [] }, "releaseState": "ONLINE" } ``` 3.创建工作流实例,即启动工作流。请求示例: ```shell POST /dolphinscheduler/projects/{projectName}/processes/{processDefinitionId}/start-time HTTP/1.1 Host: dolphinscheduler-server-host:port Content-Type: application/json Authorization: Bearer token { "scheduleTime": "2022-01-01 00:00:00", "failureStrategy": "END", "startNodeList": [ { "name": "task_1", "type": "SHELL" } ], "taskDependType": "ALL_SUCCESS", "timeout": { "strategy": "FAILED", "interval": 1, "enable": false }, "workerGroupId": -1, "processInstancePriority": "MEDIUM", "warningType": "NONE", "startParams": "", "runMode": "NORMAL", "environmentParams": "", "globalParams": [] } ``` 4.查询工作流实例状态。请求示例: ```shell GET /dolphinscheduler/projects/{projectName}/processes/{processInstanceId}/status HTTP/1.1 Host: dolphinscheduler-server-host:port Content-Type: application/json Authorization: Bearer token ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值