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

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

f01dbec16e6efffda72a8bc31211c857.png

✎ 编 者 按 

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 得到解决。

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

投稿请发邮箱:xiyan@whaleops.com 加微信(Leonard-ds

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

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

个人介绍

579180ed245ccf387c08ce1b15c61315.png

张柏强

大数据开发工程师

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

b135dcacb7edb0a20cd87b95e8f9de70.png

唐勇

大数据开发工程师

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

替换 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 如下:

beefe2e47ec2dd4fb12d85690106ddb6.png

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

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

  • UI 优化

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

9f279945154b19d9247ed2be47da9a4a.png

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

  • HiveClientTask

67a316b2a202a5ab3d147aa9bda9fcf9.png

HiveClientTask

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

  • ClickhousePushTask

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

1cdf725bf98d8a0d8f28f7808970ca43.png

ClickhousePushTask

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

6cd12d6ebaaea052faf1e2f420a915ae.png

至今为止,该部门迁移到 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)

1b2ed433723341f7733fe40813869d80.png

bb43b0d5591b9a9d6711ae0f102032cc.png

7a351e39ff7007ea07685272b914ed29.gif

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

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

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

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

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

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

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

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

b613afd628090f904f1cea71e4f47dd3.png

点个在看你最好看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DolphinScheduler社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值