DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!
点击上方 
蓝字关注我们

✎ 编 者 按
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。
个人介绍

张柏强
大数据开发工程师
主要研究方向为实时计算、元数据治理、大数据基础组件。

唐勇
大数据开发工程师
主要研究方向为实时计算和基础组件开发
替换 Oozie 的原因
之所以要替换掉 Oozie,是因为虽然 Oozie 作为 CDH 原生支持的调度系统对 Hadoop 生态的组件调度支持很多,但是使用起来也特别麻烦。首先,Oozie 的任务是需要通过配置文件来生成的,即使配合了 Hue 使用起来也不是很方便,而且 Hue 经常卡顿。同时,Oozie 基于 MR 启动任务,极其容易造成队列卡死,也不支持多租户的模式。所以,从使用者角度来看,它明显不符合我们预期的使用体验。此外,我们也为该部门进行了调度系统调研,对比了 AirFlow、Azkaban 和 Hera 等调度系统。结果从使用体验上来说明显都是不太符合我们的要求。而 DolphinScheduler 是天然分布式架构,支持拖拉拽完成 Workflow,可视化完成所有 Workflow 任务以及调度,支持多租户以及指定 Worker,同时Task 支持也足够多,所以我们最终决定选型 DolphinScheduler。
总的来说,这些踩到了我们的痛点的特性和功能包括:
天然支持分布式,支持 HA;
支持可视化完成任务部署上线,可支持指定机器执行;
支持 Task 较多,同时采用 Java 语言,扩展和 BugFix 都比较方便;
对任务执行的状态展示、图表都做的比较好,比较细;
支持资源中心,支持全局的资源引用。
因迁移过程受阻,达成提交PR成就!
我们目前使用的是 DolphinScheduler 的 1.3.8 版本,于 11 月初完成全部任务迁移。当时在一次批量上线任务时,同事将任务进行了批量调度部署上线。但是到下午准备下班时发现,任务是有调度,但是仅仅只有工作流实例,没有任务实例,这是怎么回事?于是我们检查了 master的log,发现了 log 中的 Error 如下:

看了下代码,我们发现这里是根据任务优先级去做一些调度的优化的业务,但是根据 API 文档的接口 /dolphinscheduler/projects/{projectName}/schedule/create 来看,processInstancePriority 这个参数是非必须的,但是写入到数据库时,这个字段是 null 值,就导致了这个问题。进一步检查接口我们发现,这里的确是没有指定默认值,而接口文档这个却是非必须的,于是就在这里添加了默认值。考虑到还有人可能会通过接口迁移任务时踩到这个坑,我们便将其提交给了社区PR#6690,在社区的指导下将其合并到 1.3.8 版本中,目前已经合并完成。
同时,我们还基于 DolphinScheduler 进行了不少扩充。
UI 优化
首先是在 UI 方面做了点小改动,在 DAG 界面和定时页面增加了关闭按钮。使用者都想用直线。其次,我们还对 Task 进行重排序,将常用的 Task 根据优先级排定顺序,并将Task 表单页面扩大,让使用者看着更方便。

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

HiveClientTask
我们公司内部使用的数仓工具是 Hive,但是没有基于 HiveBeeline 执行Hive 任务,而是采用 HiveClient 执行 Hive 计算任务。但 DolphinScheduler不支持这一点,所以我们就扩展了新的 TaskHiveClientTask,用户完全通过可视化表单提交部署 HiveClient 计算任务,同时与 HiveJDBC 任务执行也不冲突。
ClickhousePushTask
同时,Clickhouse 是公司内部最为常用的 Ad-Hoc 引擎,选用新调度系统的基础平台部门选型也是 Clickhouse,但问题是其推送方式比较陈旧,而且也无法保证数据唯一性,我们便将目前内部基于 Spark 开发的一个推送插件(可保证 Task 失败数据一致性(伪 ACID 方式))与 DolphinScheduler 结合,扩充一个新的 Task 来进行节点推送,使用者可以通过拖拉拽填写表单的方式来进行数据推送。

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

至今为止,该部门迁移到 DolphinScheduler 上执行的任务已达到 350+,后续一些后台任务也正在持续迁移中。
在社区,我的技能点不断 UP
参与 DolphinScheduler 的贡献过程,也是我跟着各位大佬和前辈学习不断增长技能点的过程。在这里,我也能听到一些没有听过的技术或框架,感觉每一次 FIX BUG 或捉虫都能提升自己的能力,有机会还想经常为社区做贡献。
我认为调度系统最关键的还是要保定任务稳定性,这是最基本的要求。其次,调度系统还要能够支持高可用,操作简单易上手。目前这些 DolphinScheduler 基本上都可以达到要求,其最新的 DEV 已经支持了任务插件 SPI 化,扩充 Task 更简单了,开箱即用,会用就会扩展。接下来,我们可能会为 DolphinScheduler 社区贡献一个全局任务查找模块,希望达成的目的是当查一些脚本时引用了一个 IP,就能够通过搜索找到任务信息。
最后,也希望 DolphinScheduler 社区越来越好,我个人也能通过参与社区提升技术,增长我的见识,能让我在职业道路上拥有更好的追求!
参与开源
随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

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

贡献第一个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 的二次开发
☞DolphinScheduler 荣获 2021 中国开源云联盟优秀开源项目奖!
☞议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!
☞重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!
☞巨变!a16z 关于新一代数据基础设施架构的深度洞察
☞手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程
☞Apache DolphinScheduler使用规范与使用技巧分享
点击阅读原文,加入开源!

点个在看你最好看
DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!的更多相关文章
- 基于 DolphinScheduler 的数据质量检查实践
		
今天给大家带来的分享是基于 Apache DolphinScheduler 的数据质量检查实践,分享的内容主要为以下四点: " 为什么要做数据质量检查? 为什么要基于 DolphinSche ...
 - 【Meetup回顾】Apache DolphinScheduler在联通的实践和二次开发经验分享
		
在由 openLooKeng 社区主办,Apahce DolphinScheduler社区.Apache Pulsar 社区.示说网协办的联合 Meetup 上,来自联通数字科技的王兴杰老师分享了Do ...
 - 从贡献第一个 pr 开始,我的开源之路正式开启
		
点击上方蓝字关注我们 1 我是一名开源爱好者 我是李进勇,Github Id:JinyLeeChina,目前就职于政采云,专注于大数据平台及数仓领域,是开源项目爱好者. 2 我与小海豚的不解之缘 记得 ...
 - ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件-开源
		
ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...
 - 开启基本数据结构和算法之路--初识Graphviz
		
在我的Linux刀耕开荒阶段,就想开始重拾C,利用C实现常用的基本数据结构和算法,而数据结构和算法的掌握的熟练程度正是程序的初学者与职业程序员的分水岭. 那么怎么开启这一段历程呢? 按照软件工程的思想 ...
 - 聚焦性能技术和实践, MTSC全面揭秘PerfDog演进之路
		
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 12月14日,2019年度中国移动互联网测试开发大会(Mobile Testing Summit China,简称 MTSC)深圳站于深 ...
 - DolphinScheduler 功能开发:⼯作流级别任务空跑(后端),测试工作流是否正确执行...
		
点击上方 蓝字关注我们 ✎ 编 者 按 在今年由中国科学院软件研究所主办的开源软件所供应链点亮计划-开源之夏活动中,有不少小伙伴提交了关于 DolphinScheduler 的项目,本期是来自成都信息 ...
 - 腾讯高性能RPC开发框架Tars实现服务治理(微服务)
		
Github:https://github.com/Tencent/Tars 1. 介绍 Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快 ...
 - 可能是国内最火的开源项目 —— C/C++ 篇
		
程序员们,在北上广你还能买房吗? >>> 推荐阅读: 可能是最火的开源项目 -- Java 篇 可能是国内最火的开源项目 -- PHP 篇 可能是国内最火的开源项目 -- Pyt ...
 
随机推荐
- Hbase——API操作
			
1.判断表是否存在 public static boolean isTableExit(String tableName) throws IOException { // //获取配置文件信息 // ...
 - css属性补充与JS数据类型
			
目录 溢出属性(overflow) 定位(position) z-index属性 opacity不透明度 JavaScript简介 变量与注释 数据类型 数值(Number) 字符串(String) ...
 - Seata源码分析(一). AT模式底层实现
			
目录 GlobalTransactionScanner 继承AbstractAutoProxyCreator 实现InitializingBean接口 写在最后 以AT为例,我们使用Seata时只需要 ...
 - 钉钉登录二维码嵌套在vue页面中
			
转自 https://www.csdn.net/tags/OtDacg3sMjQ2NTgtYmxvZwO0O0OO0O0O.html 钉钉登录二维码嵌套在vue页面中 2021-09-04 14:42 ...
 - DS18B20数字温度计 (一) 电气特性, 供电和接线方式
			
目录 DS18B20数字温度计 (一) 电气特性, 供电和接线方式 DS18B20数字温度计 (二) 测温, ROM和CRC校验 DS18B20数字温度计 (三) 1-WIRE总线ROM搜索算法 DS ...
 - Java开发学习(四)----bean的三种实例化方式
			
一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下: 二. ...
 - python各版本下载
			
python2源码压缩包 Python-2.7.9.tgz Python-2.7.10.tgz Python-2.7.11.tgz Python-2.7.12.tgz Python-2.7.13. ...
 - Solon 1.8.3 发布,云原生微服务开发框架
			
相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...
 - SAP - 拆包,组件入库
			
场景: 一个成品商品,例如汽车,有很多零部件:车轮,框架,发动机等.以整体形式发货过账,在遇到质量问题客户退货情况,需要把汽车拆开,然后零部件退回到库(按照BOM结构拆卸). MB1A/MIGO:发货 ...
 - js 循环生成元素,并为元素添加click事件,结果只执行最后一个点击事件
			
问题描述:有一个参数集合data,for循环为每一个参数生成一个dom元素,并附加onclick事件.生成之后发现点击事件里的参数全是data集合里的最后一个. 代码如下: var dom=$('#d ...