社区之光:我和 Apache DolphinScheduler 的这一年
点击上方“开源社”关注我们
| 作者:张伯毅| 转载自:海豚调度| 编辑:钱英宇| 设计:王福政
| 责编:王玥敏
没错,本文的主人翁就是那个在多个 DolphinScheduler 用户群超级活跃,”孜孜不倦“ 地给用户各种答疑的小伙,如果你在群里问过问题,伯毅多半概率回答过,哈哈,今天就是这样一个不仅贡献代码而且愿意帮助别人成长的小伙子的心路历程分享给大家。
主人翁:张伯毅,某上市公司大数据工程师, 目前主要负责大数据平台研发. 技术控,喜欢阅读源码, CSDN 博客专家。
DolphinScheduler 从开源算起马上 2 岁了,很荣幸与它一起成长, 离春节就剩几天了, 记录一下, 就当是对这一年多的成长做了一个回忆。
01
—
相遇
机缘巧合之下,我在 Gitee 上找到了人气爆棚的 Easy Scheduler (DolphinScheduler的前身). 然后就被它的两张图所吸引。
整体采用分布式无中心化设计: ZooKeeper(3.4.6+)
元数据存储: Mysql5.5+
前端: VUE
后端: Java, 也用到了很多优秀的项目,比如 google guava/guice, grpc, netty, quartz等
以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态 支持丰富的任务类型:Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql), Python, Sub_Process、Procedure 、Datax、Sqoop、Waterdrop 等 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作 支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败 支持工作流全局参数及节点自定义参数设置 支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑 支持任务日志在线查看及滚动、在线下载日志等 实现集群HA,通过 Zookeeper 实现 Master 集群和 Worker 集群去中心化 支持对 Master/Worker cpu load,memory,cpu 在线查看 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计 支持补数 支持多租户 支持国际化
02
—
相识
但是 DS 比较特殊. 毕竟是草根, 也没有一些大厂背书,所以领导这边也在犹豫。
2019 年 12 月 27 日 DolphinScheduler 发布了第一个 apache 版本, 真正成为中国在 apache 中为数不多的开源项目之一。
背靠大树好乘凉,最终调度系统决定采用 DolphinScheduler 作为技术原型。
03
—
相知
人生是由无数个第一次组成的,总有那么一些事情值得回忆~
3.1.贡献PR
2020 年 3 月 31 日, 第一次 PR 被 merge . 虽然只是解决了一个小小的问题,对我来说确是一个从 0 到 1 的开始. 这是我走进开源的第一步。更多的可能是一些心态上的转变, 平时虽然读过一些项目的源码, 但是从来没有考虑贡献过自己的 PR, 最多也就是写写博客记录一下, 便于以后查找. 当看到自己的PR 被 merge 的时候. 瞬间成就感满满,还开心的发了一个朋友圈 mark 了一下。
技术人嘛, 快乐就是这么简单。
3.2.文章入选公众号
2020 年过年因为疫情的原因,在家办公. ( ps :所以这也是我自从毕业之后,陪爸妈最久的一次. 待久了真容易遭嫌弃。)
在家搞调度的设计文档,需要工作流定义创建时有关于 task 任务数据结构的说明.当前的版本工作流里面的 DAG 图是拼装一个很大很大的 Json 字符串, 我需要对这里数据做一个梳理,可以给外部系统调用。但是官方没有,就自己梳理了一下,习惯性的写了一篇文章, 方便以后查找. 正好当时微信群里有一个哥们也需要,就共享了一下. 官方在征求我的同意之后,转发到了官方 [海豚调度] 公众号上. 开心是肯定的,不过想起来很久之前立下的要写公众要的 flag, 脸疼。
3.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 类型节点的时候有点费劲。
大多数人应该都知道 DS 的 github 代码库的地址, 但是很少知道 DolphinScheduler文档库 的地址。
随着 DolphinScheduler 的用户不断的增多,文档的缺失成为了 DolphinScheduler 的一个短板,所以 Lidong Dai(DolphinScheduler PPMC) 在开发群里提出文档的需求, 大家有空的话, 多贡献点文档, 为此还单独发了一个 issue, 长期置顶了很久, 有需要啥文档的小伙伴可以过去留言。
因为之前写过关于 Task 的数据结构的文档, 就先报名写了一篇 任务总体存储结构。
当然随后又写了几篇. 有一件事让我印象深刻 [ 为了一段文档,我来回改了好几次, 我得吐槽一下…]。
事情是这样滴。
有一阵用户老问关于 1.3.x 版本 worker 分组创建和资源中心如何配置的问题. 所以我就想着把文档完善一下。
正常在提交的代码时,正常来说首先要先提一个 issue,每个 PR 用于处理 issue
中的问题, 每个 PR 只能处理一个问题. 如果有多个问题,需要拆分为多个 PR
又反馈: 资源中心配置的时候, 你关于 kerberos 的配置怎么给删了 ? 现在用 kerberos 的人还是蛮多的, 把这个加上吧。修改 + 1
个人觉得用 kerberos 的人比较少,直接就把 kerberos 部分的配置就先删了,
只保留了几条非 kerberos 配置…
又反馈: 你咋加了这么多参数 ? 这样不够直观啊 . 修改 + 1
我把关于 hdfs 的大部分需要改的配置都列上了, 嗯, 这是嫌多了… _
又反馈: 中文合并了, 刚翻译的英文用户手册兄弟检查一下, 看看是不是也有这个问题 修改 + 1
同步修改英文的文档, 蹭了一个PR O(∩_∩)O哈哈~
3.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.xmlcode-style: https://github.com/apache/incubator-dolphinscheduler/blob/dev/style/intellij-java-code-style.xml
9 月初, 有伙伴在开发群里的说 DolphinScheduler 已经有 10 来个群了, 想找一些人帮忙代为管理, 正好我在用户群里面,就主动报了名, 感谢信任. 我顺利成为了二,五,七这三个用户群里的管理员. DolphinScheduler 的发展很快,前一阵又开通了 DolphinScheduler 的第八个用户群(8 群也已 300+ 人了). 当新任的管理员问需要注意哪些事项, 我就梳理了一些, 发了出来。
1.管理一下群里的日常.给大家提供一个积极向上的环境.
2.新人审核,邀请时验证信息需要填写验证信息“公司+职位+姓名” 。(有效过滤广告神器)
3.回答问题,解决用户遇到的问题,当初我就是在社区大佬的帮助下走过来的,投桃报李.
4.微信群的特权只有国内的用户享有. apache 组织对微信群是不提倡的,
一般只是认可 issue 或者邮件. 微信记录不利于知识的沉淀,
考虑到社区的良性发展,需要引导发Issue, 积累久了,
有问题可以做到搜索issue直接获取答案.简单高效.
毕竟微信群里的答疑的人都是义务性质的,都有自己的工作要忙.
回复的时效性没有办法保障. 而issue会有专人来处理,肯定不会遗漏…
5.群里发招聘信息的让他配 100 元红包,10 分钟内不发的也可以送飞
哈哈,第五条是社区给加的, 我专门拿小本本记下来的 …
04
—
相守
05
—
后记
开源社简介
开源社成立于2014年,是由志愿贡献于开源事业的个人成员,依“贡献、共识、共治”原则,所组成的厂商中立、公益非营利的开源联盟,是最早以“开源治理、国际接轨、社区发展、开源项目”为使命的开源组织。开源社积极与支持开源的社区、企业以及政府相关单位紧密合作,旨在共创健康可持续发展的开源生态,并推动中国开源社区成为全球开源体系的积极参与及贡献者。
相关阅读 | Related Reading
“源”来是你——开源社 “开源 · 事找人、人找事” 板块正式设立啦!
第二届微芒链创新应用大赛正式启动 | 柏链竞技场
/专访/对话堵俊平:最好的开源生态模型,是亚马逊的原始森林