DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!

点击上方 dc8fddd300c2d59de38e702fb1e3c250.png蓝字关注我们

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第1张图片

✎ 编 者 按 

2021 年,Apache DolphinScheduler 社区又迎来了新的蓬勃发展,社区活跃度持续提高。目前,项目 GitHub Star 已达 6.7k,贡献者达 250+,fork 数 2.4k+。仅在过去一个月内,社区就发布了两个新版本,并迎来 33 位作者向 dev 提交 85 次 commits,向所有分支提交 161 次 commits。在 dev 上,有 504 个文件发生了变化,共计新增 10,421 行代码,删除 12,376 行代码。此外,27 人 merge 了 113 个 Pull Request,102 个 issue 得到解决。

为了让更多活跃参与者的贡献被看到,社区特推出《社区星力量》专栏,分享他们挥洒汗水所得的开源成果,以及在参与开源过程中发生的小趣事。如果你也想让大家看见闪闪发光的你,欢迎投稿告诉社区你的故事,都有可能会得到刊登报道,优秀故事还会获得社区提供的走心奖品和纪念品哦!

投稿请发邮箱:[email protected] 加微信(Leonard-ds

今天,我们故事的主人公是来自绿瘦数据中心的大数据开发工程师张柏强,以及大数据开发工程师唐勇。

大家好,我是来自绿瘦数据中心的张柏强。我在今年初接触到 DolphinScheduler,起初只是了解学习,正式使用是今年 10 月份。使用 DolphinScheduler 的契机,源于当时公司内部部门合并,另一个部门需要将原来 CDH 默认的调度系统 Oozie 替换掉。于是我推荐了 DolphinScheduler。

个人介绍

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第2张图片

张柏强

大数据开发工程师

主要研究方向为实时计算、元数据治理、大数据基础组件。

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第3张图片

唐勇

大数据开发工程师

主要研究方向为实时计算和基础组件开发

替换 Oozie 的原因

之所以要替换掉 Oozie,是因为虽然 Oozie 作为 CDH 原生支持的调度系统对 Hadoop 生态的组件调度支持很多,但是使用起来也特别麻烦。首先,Oozie 的任务是需要通过配置文件来生成的,即使配合了 Hue 使用起来也不是很方便,而且 Hue 经常卡顿。同时,Oozie 基于 MR 启动任务,极其容易造成队列卡死,也不支持多租户的模式。所以,从使用者角度来看,它明显不符合我们预期的使用体验。此外,我们也为该部门进行了调度系统调研,对比了 AirFlow、Azkaban 和 Hera 等调度系统。结果从使用体验上来说明显都是不太符合我们的要求。而 DolphinScheduler 是天然分布式架构,支持拖拉拽完成 Workflow,可视化完成所有 Workflow 任务以及调度,支持多租户以及指定 Worker,同时Task 支持也足够多,所以我们最终决定选型 DolphinScheduler。

总的来说,这些踩到了我们的痛点的特性和功能包括:

  1. 天然支持分布式,支持 HA;

  2. 支持可视化完成任务部署上线,可支持指定机器执行;

  3. 支持 Task 较多,同时采用 Java 语言,扩展和 BugFix 都比较方便;

  4. 对任务执行的状态展示、图表都做的比较好,比较细;

  5. 支持资源中心,支持全局的资源引用。

因迁移过程受阻,达成提交PR成就!

我们目前使用的是 DolphinScheduler 的 1.3.8 版本,于 11 月初完成全部任务迁移。当时在一次批量上线任务时,同事将任务进行了批量调度部署上线。但是到下午准备下班时发现,任务是有调度,但是仅仅只有工作流实例,没有任务实例,这是怎么回事?于是我们检查了 master的log,发现了 log 中的 Error 如下:

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第4张图片

看了下代码,我们发现这里是根据任务优先级去做一些调度的优化的业务,但是根据 API 文档的接口 /dolphinscheduler/projects/{projectName}/schedule/create 来看,processInstancePriority 这个参数是非必须的,但是写入到数据库时,这个字段是 null 值,就导致了这个问题。进一步检查接口我们发现,这里的确是没有指定默认值,而接口文档这个却是非必须的,于是就在这里添加了默认值。考虑到还有人可能会通过接口迁移任务时踩到这个坑,我们便将其提交给了社区PR#6690,在社区的指导下将其合并到 1.3.8 版本中,目前已经合并完成。

同时,我们还基于 DolphinScheduler 进行了不少扩充。

  • UI 优化

首先是在 UI 方面做了点小改动,在 DAG 界面和定时页面增加了关闭按钮。使用者都想用直线。其次,我们还对 Task 进行重排序,将常用的 Task 根据优先级排定顺序,并将Task 表单页面扩大,让使用者看着更方便。

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第5张图片

在 Task 方面,我们增加了两个最常用的Task,HiveClientTask和ClickhousePushTask,修改了 DependTask 的逻辑,如果前置任务失败就让其等待,直至前置任务成功则继续执行,超时则自动失败。

  • HiveClientTask

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第6张图片

HiveClientTask

我们公司内部使用的数仓工具是 Hive,但是没有基于 HiveBeeline 执行Hive 任务,而是采用 HiveClient 执行 Hive 计算任务。但 DolphinScheduler不支持这一点,所以我们就扩展了新的 TaskHiveClientTask,用户完全通过可视化表单提交部署 HiveClient 计算任务,同时与 HiveJDBC 任务执行也不冲突。

  • ClickhousePushTask

同时,Clickhouse 是公司内部最为常用的 Ad-Hoc 引擎,选用新调度系统的基础平台部门选型也是 Clickhouse,但问题是其推送方式比较陈旧,而且也无法保证数据唯一性,我们便将目前内部基于 Spark 开发的一个推送插件(可保证 Task 失败数据一致性(伪 ACID 方式))与 DolphinScheduler 结合,扩充一个新的 Task 来进行节点推送,使用者可以通过拖拉拽填写表单的方式来进行数据推送。

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第7张图片

ClickhousePushTask

另外,随着任务越来越多,平台中某些久远任务会被遗忘,甚至删除一些任务也难以查询该任务的引用。针对这个问题,我们基于 DolphinScheduler 做了一套任务表依赖血缘,能够清晰地定位到某一个表被依赖的任务,但暂时还未支持可视化。同时这个改动对组件版本绑定比较紧密,让用户能够在数据库中通过 SQL 查询出任务所依赖的表等,并支持 Flink、Spark 和 Hive的 SQL Lineage 实时解析,支持绑定任务,以及任务的资源使用情况报告,使平台人员能够方便地针对任务进行调整。

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第8张图片

至今为止,该部门迁移到 DolphinScheduler 上执行的任务已达到 350+,后续一些后台任务也正在持续迁移中。

在社区,我的技能点不断 UP

参与 DolphinScheduler 的贡献过程,也是我跟着各位大佬和前辈学习不断增长技能点的过程。在这里,我也能听到一些没有听过的技术或框架,感觉每一次 FIX BUG 或捉虫都能提升自己的能力,有机会还想经常为社区做贡献。

我认为调度系统最关键的还是要保定任务稳定性,这是最基本的要求。其次,调度系统还要能够支持高可用,操作简单易上手。目前这些 DolphinScheduler 基本上都可以达到要求,其最新的 DEV 已经支持了任务插件 SPI 化,扩充 Task 更简单了,开箱即用,会用就会扩展。接下来,我们可能会为 DolphinScheduler 社区贡献一个全局任务查找模块,希望达成的目的是当查一些脚本时引用了一个 IP,就能够通过搜索找到任务信息。

最后,也希望 DolphinScheduler 社区越来越好,我个人也能通过参与社区提升技术,增长我的见识,能让我在职业道路上拥有更好的追求!

参与开源

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

231f123265a9d99f779e92d45869bcc5.png

参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:

a2faecb0741ca9a8d6d7e504d315ee8c.png

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/docs/development/contribute.html

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。

参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手

微信(Leonard-ds) 手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。添加小助手微信时请说明想参与贡献。

来吧,开源社区非常期待您的参与。

社区官网

https://dolphinscheduler.apache.org/

代码仓地址https://github.com/apache/dolphinscheduler

您的 Star,是 Apache DolphinScheduler 为爱发电的动力❤️ 

投稿请添加社区小助手微信

(Leonard-ds)

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第9张图片

DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!_第10张图片

7a351e39ff7007ea07685272b914ed29.gif

☞最佳实践 | 联通数科基于 DolphinScheduler 的二次开发

☞DolphinScheduler 荣获 2021 中国开源云联盟优秀开源项目奖!

☞议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!

☞重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!

☞巨变!a16z 关于新一代数据基础设施架构的深度洞察

☞手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程

☞Apache DolphinScheduler使用规范与使用技巧分享

点击阅读原文,加入开源!

b613afd628090f904f1cea71e4f47dd3.png

点个在看你最好看

你可能感兴趣的:(大数据,java,数据库,编程语言,分布式)