点击上方 蓝字关注我们

✎ 编 者 按

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。

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

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

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

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

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

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

因迁移过程受阻,达成提交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 在绿瘦的实践成果,开启了我的开源之路!的更多相关文章

  1. 基于 DolphinScheduler 的数据质量检查实践

    今天给大家带来的分享是基于 Apache DolphinScheduler 的数据质量检查实践,分享的内容主要为以下四点: " 为什么要做数据质量检查? 为什么要基于 DolphinSche ...

  2. 【Meetup回顾】Apache DolphinScheduler在联通的实践和二次开发经验分享

    在由 openLooKeng 社区主办,Apahce DolphinScheduler社区.Apache Pulsar 社区.示说网协办的联合 Meetup 上,来自联通数字科技的王兴杰老师分享了Do ...

  3. 从贡献第一个 pr 开始,我的开源之路正式开启

    点击上方蓝字关注我们 1 我是一名开源爱好者 我是李进勇,Github Id:JinyLeeChina,目前就职于政采云,专注于大数据平台及数仓领域,是开源项目爱好者. 2 我与小海豚的不解之缘 记得 ...

  4. ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件-开源

    ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...

  5. 开启基本数据结构和算法之路--初识Graphviz

    在我的Linux刀耕开荒阶段,就想开始重拾C,利用C实现常用的基本数据结构和算法,而数据结构和算法的掌握的熟练程度正是程序的初学者与职业程序员的分水岭. 那么怎么开启这一段历程呢? 按照软件工程的思想 ...

  6. 聚焦性能技术和实践, MTSC全面揭秘PerfDog演进之路

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 12月14日,2019年度中国移动互联网测试开发大会(Mobile Testing Summit China,简称 MTSC)深圳站于深 ...

  7. DolphinScheduler 功能开发:⼯作流级别任务空跑(后端),测试工作流是否正确执行...

    点击上方 蓝字关注我们 ✎ 编 者 按 在今年由中国科学院软件研究所主办的开源软件所供应链点亮计划-开源之夏活动中,有不少小伙伴提交了关于 DolphinScheduler 的项目,本期是来自成都信息 ...

  8. 腾讯高性能RPC开发框架Tars实现服务治理(微服务)

    Github:https://github.com/Tencent/Tars 1. 介绍 Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快 ...

  9. 可能是国内最火的开源项目 —— C/C++ 篇

    程序员们,在北上广你还能买房吗? >>>   推荐阅读: 可能是最火的开源项目 -- Java 篇 可能是国内最火的开源项目 -- PHP 篇 可能是国内最火的开源项目 -- Pyt ...

随机推荐

  1. 深入解读SQL的聚集函数

    摘要:本文从基本聚集操作入手,介绍常用的SQL语法,以及一些扩展的聚集功能,同时会讲到在GaussDB(DWS)里聚集相关的一些优化思路. 本文分享自华为云社区<GaussDB(DWS) SQL ...

  2. 理“ Druid 元数据”之乱

    vivo 互联网大数据团队-Zheng Xiaofeng 一.背景 Druid 是一个专为大型数据集上的高性能切片和 OLAP 分析而设计的数据存储系统. 由于Druid 能够同时提供离线和实时数据的 ...

  3. 从零开始实现lmax-Disruptor队列(二)多消费者、消费者组间消费依赖原理解析

    MyDisruptor V2版本介绍 在v1版本的MyDisruptor实现单生产者.单消费者功能后.按照计划,v2版本的MyDisruptor需要支持多消费者和允许设置消费者组间的依赖关系. 由于该 ...

  4. 线程安全性-原子性之Atomic包

    先了解什么是线程安全性:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称为这个类是线程 ...

  5. Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)

    1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...

  6. 透过Redis源码探究字符串的实现

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的Redis 5.0源码 概述 最近在通过 Redis 学 C 语言,不得不说, ...

  7. CentOS中实现基于Docker部署BI数据分析

    作为一个专业小白,咱啥都不懂. linux不懂,docker不懂. 但是我还想要完成领导下达的任务:在linux中安装docker后部署数据可视化工具.作为一名敬业 的打工人摆烂不可以,躺平不可以,弱 ...

  8. Jmter入门教程

    Jmter入门教程 本文已同步到公众号,欢迎关注: 1. 简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免 ...

  9. docker安装node

    #1.拉取镜像 docker pull node:latest #2.运行 docker run -itd --name node-test --restart=always node #--rest ...

  10. linux查询文件或者文件夹

    查找目录:find /(查找范围) -name '查找关键字' -type d // 查找fastdfs_storage_data文件夹 find / -name fastdfs_storage_da ...