本文章经授权转载

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秒级别工作流异常处理的更多相关文章

  1. Apache Dolphin Scheduler - Dockerfile 详解

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...

  2. Apache Dolphin Scheduler - Docker Compose 详解

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...

  3. Dolphin Scheduler 1.2.0 部署参数分析

    本文章经授权转载 1 组件介绍 Apache Dolphin Scheduler是一个分布式易扩展的可视化DAG工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程 ...

  4. Dolphin Scheduler 1.1.0升级1.2.0避坑指南

    本文章经授权转载 组件介绍 Apache Dolphin Scheduler是一个分布式易扩展的可视化DAG工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开 ...

  5. 对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高不少,并且不受NTP等外部服务影响,能准确更准确来统计耗时(java中对应的是System.nanoTime),也就是说所有使用gettimeofday来统计耗时(java中是System.curre

    对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高 ...

  6. ProjectTool写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift、Objecive-C双语言

    这是自动写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 [ 官网下载 ] 这是一个白包目录示例 ProjectToo ...

  7. 如何在CDH5上部署Dolphin Scheduler 1.3.1

    点击蓝色字关注! 本篇文章大概8440字,阅读时间大约20分钟 本文记录了在CDH5.16.2集群上集成Dolphin Scheduler 1.3.1的详细流程,特别注意一下MySQL数据库的连接串! ...

  8. SQL Server错误严重性级别和异常处理

    关于SQL Server的错误严重性级别的说明,强烈认真看一下下面的两个链接 脱机帮助 ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/sqlerrm9/html/ ...

  9. crontab如何设置秒级别的定时【转载】

    * * * * * date > /home/gamester88/test/nihao.txt * * * * * (sleep 10 && date >> /ho ...

随机推荐

  1. .NET C#基础(2):方法修饰符 - 给方法叠buff

    0. 文章目的   本文面向有一定.NET C#基础知识的学习者,介绍C#中的方法修饰符的含义和使用以及注意事项.   1. 阅读基础   理解C#基本语法(如方法声明)   理解OOP基本概念(如多 ...

  2. C语言- 基础数据结构和算法 - 栈的顺序存储

    听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...

  3. 基于BPM的低代码开发平台应具备什么功能

    一个BPM平台应该具备什么样的功能    用户在选型BPM软件的时候往往不知道该关注哪些功能,什么样的BPM软件能满足国内企业应用需求,笔者从多年BPM研发和实施经验提炼了中国特色BPM应该具备的功能 ...

  4. VBA驱动SAP GUI实现办公自动化(一)

    小爬之前写过一系列Python驱动SAP GUI实现办公自动化的文章,其实如果我们的实际业务不是太复杂,且我们对VBA语法比较熟悉的话,我们完全可以借助Excel VBA来驱动SAP GUI做很多自动 ...

  5. Redis配置登录密码

    更新记录 2022年6月14日 发布. 打开配置文件 vi /etc/redis/redis.conf 搜索来找到下面这行注释 #requirepass foobared 取消注释,把 foobare ...

  6. SQL Server默认数据库存放位置

    更新记录 2022年6月13日 发布. Windows操作系统 C:\Program Files\Microsoft SQL Server\MSSQLxx_xx.MSSQLSERVER\MSSQL\D ...

  7. 【由浅入深_打牢基础】HOST头攻击

    [由浅入深_打牢基础]HOST头攻击 前几天一直准备别的事情,然后用了2/3天时间去挖了补天某厂的SRC,还是太菜了,最后提交了一个低危(还没出结果,还有点敏感信息泄露,感觉略鸡肋也没交),不过偶然发 ...

  8. 面试突击61:说一下MySQL事务隔离级别?

    MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...

  9. Redis docker 主从模式与哨兵sentinel

    更多技术记录,请参考软件开发 | 编程 | RustFisher 为实现redis的高可用,我们采用主从模式加哨兵的方法. 一主二从三哨兵,共启动6个redis容器.本文示例在同一个服务器上进行操作. ...

  10. 训练一个图像分类器demo in PyTorch【学习笔记】

    [学习源]Tutorials > Deep Learning with PyTorch: A 60 Minute Blitz > Training a Classifier   本文相当于 ...