Apache DolphinScheduler,为Apache开源项目, 简称”DS”, 中文名 “小海豚调度”(海豚聪明、人性化,又左右脑可互相换班,终生不用睡觉)。希望 DolphinScheduler 就像它的名字一样,成为一个“开箱即用”的灵活易用的调度系统。社区发展非常迅速,目前已有像IBM、腾讯、美团、360等 400+ 公司在生产上使用,代码+文档贡献者近200位,社区用户4000 +人。

主人翁介绍

姓名:张伯毅
某上市公司大数据工程师,目前主要负责大数据平台研发.技术控,喜欢阅读源码,CSDN博客专家.

DolphinScheduler已经一岁了,很荣幸与它一起成长, 2020年就剩几天了,记录一下,就当是对这一年多的成长做了一个梳理
(开启碎碎念模式…).

一. 相遇

2019年10月公司决定开展中台方面的业务,基于大数据体系,要搞一套从数据接入到数据输出一站式的"全家桶". 在大数据体系,其实各项技术已经相对成熟了. 之前公司用的技术栈是HDP体系,所以一直使用Oozie作为调度系统. 在调研阶段,出于各种原因吧,但是我觉得Oozie并不是很好用,比如在考虑到定制开发的时候,觉得前端开发成本有点高以及最重要的是觉得在DAG可视化方面并不是很好等等各种原因,所以就开始寻找其他的解决方案.
机缘巧合之下,我在gitee上找到了人气爆棚的Easy Scheduler (DolphinScheduler的前身). 然后就被它的两张图所吸引.


一种心动的感觉,不慌不慌,稳住. 再看技术体系:

后端: SpringBoot (2.x)
前端: VUE
编译: Maven(3.3+) ,
元数据存储: Mysql5.5+
分布式无中心化设计: ZooKeeper(3.4.6+)

我去,都是主流技术栈,二次开发基本零门槛. 再看一下其他的特性,

  • 以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态
  • 支持丰富的任务类型:Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql),Python,Sub_Process、Procedure等
  • 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作
  • 支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败
  • 支持工作流全局参数及节点自定义参数设置
  • 支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑
  • 支持任务日志在线查看及滚动、在线下载日志等
  • 实现集群HA,通过Zookeeper实现Master集群和Worker集群去中心化
  • 支持对Master/Worker cpu load,memory,cpu在线查看
  • 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计
  • 支持补数
  • 支持多租户
  • 支持国际化

O(∩_∩)O哈哈~ , 就这样一见钟情 …


二. 相识

接下来,就是考虑怎么跟领导推荐这个技术,当时也调研了一些其他的技术,比如NIFI, Azkaban,AirFlow等等.
首先排除掉的就是NIFI和AirFlow. 不是这两个不好,是一些其他的原因.
NIFI是做的最完善的,但是太重了,出问题用源码定位费劲. 维护/二开成本真要命.
AirFlow是Python写的,因为公司的人基本都是JAVA体系,考虑到这点就直接放弃了.

剩下的无非就是做对比了,出一份报告,然后跟领导汇报.虽然我个人是推崇DS的,
但是DS比较特殊.毕竟是草根,也没有一些大厂背书,所以领导这边也在犹豫.
转机:
2019年12月27日DolphinScheduler发布了第一个 apache版本,真正成为中国在apache中为数不多的开源项目之一
背靠大树好乘凉,最终调度系统决定采用DolphinScheduler作为技术原型.

二. 相知

人生是由无数个第一次组成的,总有那么一些事情值得回忆~

2.1. 贡献PR

2020年3月31日,第一次PR被merge . 虽然只是解决了一个小小的问题,对我来说确是一个从0到1的开始. 这是我走进开源的第一步.

更多的可能是一些心态上的转变, 平时虽然读过一些项目的源码,但是从来没有考虑贡献过自己的PR,最多也就是写写博客记录一下,便于以后查找. 当看到自己的PR被merge的时候. 瞬间成就感满满,还开心的发了一个朋友圈mark了一下.
技术人嘛,快乐就是这么简单.

2.2. 文章入选公众号

2020年过年因为疫情的原因,在家办公. ( ps :所以这也是我自从毕业之后,陪爸妈最久的一次. 待久了真容易遭嫌弃. )
在家搞调度的设计文档,需要工作流定义创建时有关于task任务数据结构的说明.当前的版本工作流里面的DAG图是拼装一个很大很大的Json字符串, 我需要对这里数据做一个梳理,可以给外部系统调用. 但是官方没有,就自己梳理了一下,习惯性的写了一篇文章,方便以后查找. 正好当时微信群里有一个哥们也需要,就共享了一下. 官方在征求我的同意之后,转发到了官方[海豚调度]公众号上. 开心是肯定的,不过想起来很久之前立下的要写公众要的flag,脸疼.
现在,更疼…

2.3. 基于源码开发

设计完成了,肯定是要进入到开发阶段的 ,当时有两个版本可选一个是1.2.1版本,另一个是1.3.0版本, 不过1.3.0版本正在开发中,还不稳定.
但是1.3.0相对比1.2.1多了很多新特性. 比如: 重构了worker架构.资源文件支持目录创建,新增了条件分支、Sqoop、DataX任务类型的节点.工作流定义支持移动/导入/导出等等多个特性, 所以就选了1.3.0版本进行开发.
因为1.3.0的worker进行了重构,所以又得重新过一遍源码,重构之后worker节点确实简洁了很多. 就是看master类型节点的时候有点费劲.
翻出来之前看master源码画的图,看着依旧觉得代码有点绕.庆幸,官方下一个阶段要做的事情就是对master进行重构,欢迎加入哦.

贴一张之前分析master的图代码逻辑图:

2.4. 贡献文档

大多数人应该都知道DS的github代码库的地址, 但是很少知道 DolphinScheduler文档库的地址.
随着DolphinScheduler的用户不断的增多,文档的缺失成为了DolphinScheduler的一个短板,所以代老板(DolphinScheduler PPMC) 在开发群里提出文档的需求,大家有空的话,多贡献点文档, 为此还单独发了一个issue,长期置顶了很久,有需要啥文档的小伙伴可以过去留言.

因为之前写过关于task的数据结构的文档,就先报名写了一篇任务总体存储结构.

当然随后又写了几篇.有一件事让我印象深刻[ 为了一段文档,我来回改了好几次,我得吐槽一下代老板…].
事情是这样滴.

有一阵用户老问关于1.3.x版本worker分组创建和资源中心如何配置的问题. 所以我就想着把文档完善一下.

先写了worker分组如何配置文档, 然后又写的资源中心如何配置. 因为改的是同一个文件,所以合并到同一个pr里面了.

代老板反馈: 写的不错, 最好能拆开分两个PR进行提交. 修改 + 1

正常在提交的代码的时候,正常来说首先要先提一个issue,每个PR用于处理issue中的问题, 每个PR只能处理一个问题.如果有多个问题,需要拆分为多个PR **

代老板反馈: 资源中心配置的时候, 你关于kerbos的配置怎么给删了 ? 现在用kerbos的人还是蛮多的,把这个加上吧. 修改 + 1

个人觉得用kerbos的人比较少,直接就把kerbos部分的配置就先删了,只保留了几条非kerbos配置…

代老板反馈: 你咋加了这么多参数 ? 这样不够直观啊 . 修改 + 1

我把关于hdfs的大部分需要改的配置都列上了,嗯,这是嫌多了… _

代老板反馈: 中文合并了,刚翻译的英文用户手册兄弟检查一下,看看是不是也有这个问题 修改 + 1

同步修改英文的文档, 蹭了一个PR O(∩_∩)O哈哈~

思考: 是不是有些事情可以做的更好,不只是追求95% , 而是99% ~

2.5. 配置checkstyle

每一个人写代码的时候都有自己的习惯,开源参与的人比较多,随着时间的推移,但是如何代码规范一直是一个问题,之前DolphinScheduler社区是采用sonarcloud做一些初步的验证,比如代码的UT覆盖率必须到33%以上, 使用sonarcloud做code smell检查. 然后必须有两个review ( + 1) 之后,才会被merge到代码库.但是代码的风格不好控制, 比如代码的缩进,空格,换行的数量等等的代码风格上的问题. 后来一个小伙伴贡献了一个code style 检查约束.
使用sonarcloud自动检查,并根据配置的代码风格给与提示.之前我一直用阿里的代码检查工具, 这个还真是第一次用,配置这个当时花了不少时间.

其实不管用什么工具,在代码的质量上开始做要求并给与规范化的限定, 这不是一件好事么~

参考的配置 记录一下,方便以后自己查找:

checkstyle 参考[https://checkstyle.sourceforge.io/]是一种帮助开发者编写遵循编码规范的 Java 代码开发工具。它可以自动化检查 Java 代码的方法以及格式,使得开发者不用再做这项无聊(但很重要)的任务。它非常适合于希望实施编码标准的项目。

在 DolphinScheduler 中配置 checkstyle 和 code-style 的方式:

.checkstyle 和 code-style 配置文件
checkstyle: https://github.com/apache/incubator-dolphinscheduler/blob/dev/style/checkstyle.xml
code-style: https://github.com/apache/incubator-dolphinscheduler/blob/dev/style/intellij-java-code-style.xml

2.6. 群管理

9月初,代老板在开发群里的说 DolphinScheduler已经有10来个群了, 想找一些人帮忙代为管理,正好我在用户群里面,就主动报了名,感谢信任.我顺利成为了二,五,七这三个用户群里的管理员. DolphinScheduler的发展很快,前一阵又开通了DolphinScheduler的第八个用户群. 当时新任的管理员问需要注意哪些事项,我就梳理了一些,发了出来.

1.管理一下群里的日常.给大家提供一个积极向上的环境.
2.新人审核,邀请时验证信息需要填写验证信息“公司+职位+姓名” 或 “学校+姓名”。(有效过滤广告神器)
3.回答问题,解决用户遇到的问题,当初我就是在社区大佬的帮助下走过来的,投桃报李.
4.微信群的特权只有国内的用户享有. apache组织对微信群是不提倡的,一般只是认可issue或者邮件. 微信记录不利于知识的沉淀,考虑到社区的良性发展,需要引导发Issue, 积累久了,有问题可以做到搜索issue直接获取答案.简单高效.毕竟微信群里的答疑的人都是义务性质的,都有自己的工作要忙.回复的时效性没有办法保障. 而issue会有专人来处理,肯定不会遗漏…
5.群里发招聘信息的让他配100元红包,10分钟内不发的也可以送飞

哈哈,第五条是代老板给加的,我专门拿小本本记下来的 …

三. 相守

自从参与了DolphinScheduler之后,觉得社区的技术氛围会特别好,尤其是一个技术人,跟一堆牛人在一起,相互成长是一件蛮幸福的事情.
比如最近一阵官方有大动作,比如重构工作流定义数据结构, 重构master服务. 光线上的架构讨论会就开了四次. 一群技术人在聊架构,聊设计,分享思路这个是平时很难遇到的. 在讨论的过程中,真的是考验知识储备灵活运用的时刻.收获良多.越发的认可一句话:
一个人可能会走的很快,但是一群人才能走的更远.

PS: 推荐一项福利,对DolphinScheduler有过贡献的人,可以进入到开发群,遇到问题可以优先帮忙解决.我当时搞定制开发的时候,就收到过很多大佬的帮助,重要的问题可以获取到第一手资料,及时反馈到生产.

最后秀两张Apache DolphinScheduler Group 8 群 @ SUN 同学画的两张工作流的图,谁说程序员不懂浪漫~


欢迎加入APachec dolphinscheduler社区

https://github.com/apache/incubator-dolphinscheduler (请记得fork和star)
订阅邮件列表
用自己的邮箱向dev-subscribe@dolphinscheduler.apache.org发送一封邮件,主题和内容任意。
接收确认邮件并回复。完成步骤1后,将收到一封来自dev-help@dolphinscheduler.apache.org的确认邮件(如未收到,请确认邮件是否被自动归入垃圾邮件、推广邮件、订阅邮件等文件夹)。然后直接回复该邮件,或点击邮件里的链接快捷回复即可,主题和内容任意。
接收欢迎邮件。完成以上步骤后,会收到一封主题为WELCOME to dev@dolphinscheduler.apache.org的欢迎邮件,至此已成功订阅Apache DolphinScheduler(Incubating)的邮件列表。

我和Apache DolphinScheduler的这一年的更多相关文章

  1. Apache DolphinScheduler(海豚调度) - 1.3 系列核心表结构剖析

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

  2. 本周六 Apache DolphinScheduler & Doris 将联合线上 Meetup

    活动背景 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种背景下,相 ...

  3. Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上

    概述 定义 dolphinscheduler 官网地址 https://dolphinscheduler.apache.org/ dolphinscheduler GitHub地址 https://g ...

  4. Apache DolphinScheduler 3.0.0 正式版发布!

    ​  点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler   ​ 版本发布 2022/8/10 2022 年 8 ...

  5. 日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”?

    作者 | 胡泽康 鄞乐炜 作者简介 胡泽康 联通(广东)产业互联网公司  大数据工程师,专注于开源大数据领域,从事大数据平台研发工作 鄞乐炜 联通(广东)产业互联网公司 大数据工程师,主要从事大数据平 ...

  6. 数据平台调度升级改造 | 从Azkaban 平滑过度到 Apache DolphinScheduler 的操作实践

    Fordeal的数据平台调度系统之前是基于Azkaban进行二次开发的,但是在用户层面.技术层面都存在一些痛点问题难以被解决.比如在用户层面缺少任务可视化编辑界面.补数等必要功能,导致用户上手难体验差 ...

  7. 倒计时2日!基于 Apache DolphinScheduler&TiDB 的交叉开发实践,从编写到调度让你大幅提升效率

    当大数据挖掘成为企业赖以生存.发展乃至转型的生命,如何找到一款好软件帮助企业满足需求,成为了许多大数据工程师困扰的问题.但在当下高速发展的大数据领域,光是一款好软件似乎都不足以满足所有场景业务需求,许 ...

  8. 感谢有你!Apache DolphinScheduler 项目 GitHub star 突破 8k

    本周伊始,Apache DolphinScheduler 项目在 GitHub 上的 Github Star 总数首次突破 8K.目前,Apache DolphinScheduler 社区已经拥有 C ...

  9. 大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用

    大家下午好,我是来自当贝网络科技大数据平台的基础开发工程师 王昱翔,感谢社区的邀请来参与这次分享,关于 Apache DolphinScheduler 在当贝网络科技大数据环境中的应用. 本次演讲主要 ...

  10. Apache DolphinScheduler&TiDB联合Meetup | 聚焦开源生态发展下的应用开发能力

    在软件开发领域有一个流行的原则:Don't Repeat Yourself(DRY),翻译过来就是:不要重复造轮子.而开源项目最基本的目的,其实就是为了不让大家重复造轮子. 尤其是在大数据这样一个高速 ...

随机推荐

  1. .NET MAUI 正式版GA发布

    .NET MAUI – 一个代码库,多个平台 欢迎使用 .NET 多平台应用 UI.此版本标志着我们统一 .NET 平台的多年旅程中的新里程碑.现在,您和超过 500 万其他 .NET 开发人员拥有了 ...

  2. 「JOISC 2020 Day1」汉堡肉

    我终于学会打开机房的LOJ了! description LOJ3272 有\(n(n<=2*10^5)\)个矩形,让你找\(k(k<=4)\)个点可以覆盖所有矩形(点可重复),输出一种方案 ...

  3. Clickhouse实时数仓建设

    1.概述 Clickhouse是一个开源的列式存储数据库,其主要场景用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告.今天,笔者就为大家介绍如何使用Clickhouse来构建实 ...

  4. Vben Admin 源码学习:项目初始化

    0x00 前言 Vue-Vben-Admin 是一个免费开源的中后台模版.使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案考. 本系列本着学习参考的目 ...

  5. docker安装nginx,配置SSL

    nginx安装 下载镜像并测试 1.docker pull nginx 2.docker images nginx 查看我们拉取到本地的nginx镜像IMAGE ID 3.首先测试下nginx镜像是否 ...

  6. 【SpringSecurity系列3】基于Spring Webflux集成SpringSecurity实现前后端分离无状态Rest API的权限控制

    源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/02-springsecurity-state ...

  7. Groovy基础语法

    Groovy 基础语法 变量定义 1.支持动态类型,使用def关键字定义变量 // Java中定义变量的方式 int age = 18; String name = "张三"; / ...

  8. 获得MySQL数据库存放位置

    更新记录 2022年6月13日 发布. 2022年6月11日 开始. 通过查看MySQL与存储目录相关的参数 show variables like '%dir%'; 通过查询后datadir参数的值 ...

  9. JavaGUI——Java图形用户界面

    1.Java GUI 概述 GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用图形方式显示的计算机操作用户界面,与早期计算机使用的命令行界面相比,图形界面对 ...

  10. SAP Grid control( ALV Grid 列表 自定义 按钮)

    ALV 列表和按钮 效果 源代码 PROGRAM bcalvc_tb_menu_with_def_but. *&&&&&&&&& ...