apachedolphinscheduler诞生记

代立冬 代立冬     2022-12-13     388

关键词:

Apache DolphinScheduler 诞生记

DolphinScheduler,简称”DS”, 中文名 “小海豚调度”(海豚聪明、人性化,又左右脑可互相换班,终生不用睡觉)。希望 DolphinScheduler 就像它的名字一样,成为一个“开箱即用”的灵活易用的调度系统。

1概述

DAG 全称Directed Acyclic Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。

Apache DolphinScheduler(目前处在孵化阶段)是一个分布式、去中心化、易扩展的可视化DAG工作流任务调度系统,其致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。

DolphinScheduler是2019年开源的一个调度系统,在去年美国时间2019年8月29号,分布式任务调度引擎DolphinScheduler(原EasyScheduler)正式通过顶级开源组织Apache基金会的投票决议,以全票通过的优秀表现正式成为了Apache孵化器项目!

2背景

在2017年,易观在运营自己6.8Pb大小、6.02亿月活、每天近万个调度任务的大数据平台时,受到ETL复杂的依赖关系、平台易用性、可维护性及二次开发等方面掣肘,易观的技术团队渴望找到一个具有以下功能的数据调度工具:

易于使用,开发人员可以通过非常简单的拖拽操作构建ETL过程。不仅对于ETL开发人员,无法编写代码的人也可以使用此工具进行ETL操作,例如系统管理员和分析师; 解决“复杂任务依赖”问题,并且可以实时监视ETL运行状态; 支持多租户; 支持许多任务类型:Shell,MR,Spark,Flink,SQL(mysql,postgresql,hive,sparksql,clickhouse等),DataX,Sqoop,Python,Sub_Process,Procedure等; 支持HA和线性可扩展性。 易观技术团队意识到现有开源项目没有能够达到他们要求的,因此决定自行开发这个工具。他们在2017年底设计了DolphinScheduler的主要架构;2018年5月完成第一个内部使用版本,后来又迭代了几个内部版本后,系统逐渐稳定下来。

3特点

DolphinScheduler提供了许多易于使用的功能,可加快数据ETL工作开发流程的效率。其主要特点如下:

  • 通过拖拽以DAG 图的方式将 Task 按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态;
  • 支持丰富的任务类型;
  • 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill 任务等操作;
  • 支持工作流全局参数及节点自定义参数设置;
  • 支持集群HA,通过 Zookeeper实现 Master 集群和 Worker 集群去中心化;
  • 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计;
  • 支持补数,并行或串行回填数据。

4系统架构

DolphinScheduler 是从数据处理的痛点出发,其解决的问题以及优化的方向主要有以下 5 点:

  • 可视化流程设计减轻了开发者配置工作流的复杂度,从繁琐的基础配置中解放出来,不用再靠编程来配置流程,提升开发效率;

  • 扩展性强,在当下这样一个业务变化快、技术迭代频繁的现在,丰富的任务类型、跨语言和自定义插件机制良好的可扩展性,无疑使这款框架具备了更长的寿命和更广泛的落地场景;

  • 支持工作流定时调度、依赖调度、手动调度、手动暂停 / 停止 / 恢复,同时支持失败重试 / 告警、从指定节点恢复失败、Kill 任务等操作

  • 支持集群 HA,通过 Zookeeper 实现 Master 集群和 Worker 集群的天然去中心化架构设计,使得系统的高可用性得到保证;

  • 通过拖拽以 DAG 图的方式将 Task 按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态,完善的服务监控系统,方便运维人员快速进行问题定位。

目前,IBM、中国平安、美团、360、招商银行、科大讯飞、联通、多点、芒果tv、雪球等多家企业都已经将 Apache DolphinScheduler 应用到了实际场景中。

1.2.x 架构

5开源推进路线

万丈高楼平地起,从项目启动的那一刻,我们就确定了开源的目标,从那一刻,开源的种子就种在了每一位项目成员的心中,它是一个使命, 也是所有人的共识和承诺。

要采用模块化的设计,这样才能便于开源后的协同开发; 要选用开源的技术组件,这样才能便于开源后让更多的开发者参与进来; 大道至简,一定要做到开箱即用,我们调度的名字就叫EasyScheduler。 ... 就这样,伴随着每一位的手舞足蹈,热情澎湃和唇枪舌剑,2017年12月在北京市朝阳区恒通商务园B12栋3层办公室里,拉开了EasyScheduler的序幕。

使命必达、分秒必争,每一位伙伴都自动自发、随时待命。

2018年5月,EasyScheduler在易观千帆成功上线使用。

2019年3月,开放给外部种子用户使用,正式发布第一个开源版本1.0.0。

2019年5月,相继推出了1.0.1、1.0.2和1.0.3版本。

开源的种子早已种下,只有破土而出,才能扎根于大地。 ASF作为全球最大的开源基金会,一直致力于开源软件生态的营造,让软件技术能够在全球共享,这是ASF无比耀眼的魅力所在。

我们要扎根ASF,我们要进入到全球最大的开源组织,让我们的项目在全球共享,于是我们决定正式探索Apache开源孵化之路。

这是一个0到1的问题,这是一个需要拿到入场券资格的问题,那么如何才能够进入Apache呢? 一个项目如果希望进入到Apache孵化器,至少需要1名Champion和2名mentor。所以我们的第一个难题就是如何找到champion和mentor. ASF孵化器拥有导师200多位,然而活跃的中国导师不超过5位,ALC Beijing也没有成立,我们只能四处询问,八方求援,经历了无数次的尝试,甚至出现了一丝丝的动摇, 但是我们马上就想到团队每一个人的付出和努力、想到那些默默支持我们前行的用户、想到一开始就种在我们心中的开源之梦, 我们坚信有信念就一定有远方,有梦想就一定有希望,我们坚信彩虹一定会出现,最终我们幸运地迎来了我们的champion和mentor。

至今仍清晰记得初见吴晟老师的场景:吴晟老师用了将近一下午的时间给我们普及了Apache孵化器的一些标准和Apache Way,我们也从最开始的喜悦兴奋变为了默默沉思。 第二个迎头重击就是Apache的license协议遵从,我们需要检查所有的依赖是否符合license许可,否则就需要修改,于是又经过了几个月的重构和升级。 这里还有一个小插曲,我们在申请进入Apache孵化器过程当中,发现Easy Scheduler不是全球唯一的名字,于是又进行了投票最终选中了 DolphinScheduler.

所幸我们一直坚定着信念,天道酬勤,当美国时间2019年8月29号DolphinScheduler全票通过正式成为Apache孵化器项目的时候, 每个人都洋溢着开心的笑容,但是我们又很快的冷静下来,真正的Apache Way也许才刚刚开始。

第一次的Apache release,是孵化过程中很重要的一个里程碑。DS用了4个月的时间发出了第一个Apache release,一个很大的原因 就是起初代码层面上关注较多,而Apache对于license和商标有着近乎严苛的要求,在release的时候会进行非常仔细地检查, 字体的版权或者某个前端组件使用的license不合规范都会结束一周左右的发版流程。

经历过第一次Apache release发版后,会对Apache Community Over Code的名言有着更切身的体会,成功的开源项目最重要的因素就是: 社区、社区还是社区。时间仿佛回到了吴晟老师给我们首次讲述Apache Way的那个下午: “Apache 是一个透明、开放的社区,需要让工作的人来决定;如果一件事情没有出现在邮件列表中,那它就没有发生; Apache 社区是一个公开、平等、精英治理的社区;Apache更多的是给一个思路,很多时候没有一个固定的规则和流程。。。”

感谢吴晟老师、史少峰老师、陈亮老师、Furkan Kamaci老师和Kevin Ratnasekera老师。 感谢每一位使用过DS的用户、每一位参与过DS社区贡献的伙伴,感谢你们愿意牺牲自己宝贵的时间与我们一同前行,一个star,一个issue, 一篇文章、一行代码、一封邮件列表,参加一场meetup的举办,这都是我们一起同在的见证!也期待更多的伙伴加入到DS社区, 我们一起披荆斩棘、一起高歌猛进!一起经历风雨、一起见证胜利!

欢迎加入Apache dolphinscheduler 社区

在线试用

如果您不想部署,而是想先体验一下,那么我们也提供了在线 Demo (1.2.0 版本),Demo可以快速体验一下 Shell、Python等任务类型,受制于服务器单机硬件条件,有些功能比如不能定时调度,各种数据源不能体验外,无其他限制,大家可以联系龙飞微信开通 Demo

我们鼓励任何形式的参与社区,最终成为 Committer 或 PPMC,如:

  • 将遇到的问题通过 github 上 issue 的形式反馈出来
  • 回答别人遇到的 issue 问题
  • 帮助完善文档
  • 帮助项目增加测试用例
  • 为代码添加注释
  • 提交修复 Bug 或者 Feature 的 PR
  • 发表应用案例实践、调度流程分析或者与调度相关的技术文章
  • 帮助推广 DolphinScheduler,参与技术大会或者 meetup 的分享等

欢迎加入贡献的队伍,加入开源从提交第一个 PR 开始

  • 比如添加代码注释或找到带有 ”easy to fix” 标记或一些非常简单的 issue(拼写错误等) 等等,先通过第一个简单的 PR 熟悉提交流程

注:贡献不仅仅限于 PR 哈,对促进项目发展的都是贡献

相信参与 DolphinScheduler,一定会让您从开源中受益!

如何成为 ALC Beijing的成员

ALC Beijing 欢迎任何人的参与!不设置任何门槛,只要有意愿传播 Apache 以及开源之道的小伙伴都可以参与进来!具体的方式如下:

  • 加入我们的活动。大家可以通过关注ALC Beijing公众号获取最新的活动信息,并参加我们的线上或者线下的活动。
  • 成为ALC Beijing会员。ALC Beijing作为一个公益组织,需要大量的志愿者的来帮助协调和组织活动。志愿者成为会员的原则和Apache软件基金的其他项目发展Committer以及PMC成员的方式一样, 基于志愿者在社区中的贡献,采用投票邀请方式成为ALC Beijing 会员。 欢迎关注"ALC Beijing"公众号

参考链接

[1] https://dolphinscheduler.apache.org/zh-cn/index.html

[2] https://www.infoq.cn/article/SeODu1bwlyjCUR70t6KD

感谢花时间阅读,谢谢!

javascript世界万物诞生记

作者:manxisuo链接:https://zhuanlan.zhihu.com/p/22989691来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。一.无中生有起初,什么都没有。造物主说:没有东西本身也是一种东西啊,于是就有了null... 查看详情

mpeg诞生记

点击上方“LiveVideoStack”关注我们作者|LeonardoChiariglione翻译|Alex技术审校 | 李忠、张贤国MPEG 视 野#004#纯从逻辑上来讲,MPEG本不应该存在。 20世纪80年代,媒体标准化这个“银河帝国”被牢牢掌握在ITU(视频通信和... 查看详情

rtp诞生记

...者之一RonFrederick将为我们讲述这个如此重要的协议是如何诞生的。01—前因1992年10月,我开始试验SunVideoPix的图像采集卡,因为我打算基于IP组播写一个网络视频会议工具。该工具以vat(由L 查看详情

漫画|揭密微信诞生记

据民间流传微信的诞生源于张小龙因得一扫地高僧指点,才有了微信的诞生,而这其中也少不了程序员们的付出,一起来看看它的故事吧~本期漫画灵感来源于《微信第1行代码曝光!》文章,部分情节仅为民间流传或虚构。篇... 查看详情

linux诞生记

大家好,我叫Linux,是一名计算机的“大管家”,日常工作是指挥CPU、内存、硬盘、键盘、鼠标、显示器等设备有条不紊地运行起来。形象地讲,我是底层硬件与用户沟通的桥梁。用户可以通过我输入命令,我负责对命令... 查看详情

(转载)javascript世界万物诞生记

一.无中生有起初,什么都没有。造物主说:没有东西本身也是一种东西啊,于是就有了null:现在我们要造点儿东西出来。但是没有原料怎么办?有一个声音说:不是有null嘛?另一个声音说:可是null代表无啊。造物主说:那就... 查看详情

jquery诞生记-原理与机制

一、看似偶然的东西实际是必然会发生的我大学时候在图书馆翻过一本很破旧的书,讲生物理论的,主要内容就是探讨生命的产生是偶然还是必然。里面很多亚里士多德都看不懂的公式计算什么的,还有模拟原始地球环境出现了... 查看详情

bug诞生记——临时变量栈变量导致的双杀(代码片段)

    这是《bug诞生记》的第一篇文章。本来想起个文艺点的名字,比如《Satan(撒旦)来了》,但是最后还是想让这系列的重心放在“bug的产生过程”和“缺失的知识点”上,于是就有了本系列这个稍微中性... 查看详情

我为什么还要造轮子?monk.ui诞生记

...端数据交互的问题,导致数据绑定非常难!,所以Monk.UI诞生了。 Monk.UI目前只是一个表单美化工具,非常小巧,适合PC使用 预览地址:http://www.baisoft.org/public/monkui 查看详情

leafage诞生记(二nuxt.js如何在组件和页面请求数据)

本文个人博客地址:https://www.abeille.top/posts/detail/213489UI上一篇创建了前端工程,接下来开始写代码。因为初始化项目,只是最小的一些基本依赖,再开发中,需要一些第三方的库来支持,比如样式/组件库。在开发Leafage网站的过... 查看详情

bug诞生记——不定长参数隐藏的类型问题(代码片段)

    这个bug的诞生源于项目中使用了一个开源C库。由于对该C库API不熟悉,一个不起眼的错误调用,导致一系列诡异的问题。最终经过调试,我们发现发生了内存覆盖问题。为了直达问题根节,我将问题代码简化... 查看详情

bug诞生记——不定长参数隐藏的类型问题(代码片段)

    这个bug的诞生源于项目中使用了一个开源C库。由于对该C库API不熟悉,一个不起眼的错误调用,导致一系列诡异的问题。最终经过调试,我们发现发生了内存覆盖问题。为了直达问题根节,我将问题代码简化... 查看详情

一个高扩展高可用高负载的应用架构的诞生记(原创)

本文希望通过实现一个用户中心的应用来模拟一个高可用、高扩展、高性能的架构环境。目录结构1、需求分析2、功能设计3、技术要求4、技术准备1)git版本控制2) 前端css/vue3)node4)nginx5)memcache/redis6)mysql/mongodb/hbase7)docker&nb... 查看详情

bug诞生记——信号(signal)处理导致死锁(代码片段)

    这个bug源于项目中一个诡异的现象:代码层面没有明显的锁的问题,但是执行时发生了死锁一样的表现。我把业务逻辑简化为:父进程一直维持一个子进程。(转载请指明出于breaksoftware的csdn博客)   ... 查看详情

bug诞生记——信号(signal)处理导致死锁(代码片段)

    这个bug源于项目中一个诡异的现象:代码层面没有明显的锁的问题,但是执行时发生了死锁一样的表现。我把业务逻辑简化为:父进程一直维持一个子进程。(转载请指明出于breaksoftware的csdn博客)   ... 查看详情

大数据任务调度工具apachedolphinscheduler

文章目录大数据任务调度工具ApacheDolphinScheduler项目亮点DolphinScheduler简介调度系统选型为什么大数据要选择DolphinSchedulerDolphinScheduler的技术栈大数据任务调度工具ApacheDolphinScheduler项目亮点专门针对大数据平台国人开发支持单机、... 查看详情

大数据任务调度工具apachedolphinscheduler

文章目录大数据任务调度工具ApacheDolphinScheduler项目亮点DolphinScheduler简介调度系统选型为什么大数据要选择DolphinSchedulerDolphinScheduler的技术栈大数据任务调度工具ApacheDolphinScheduler项目亮点专门针对大数据平台国人开发支持单机、... 查看详情

bug诞生记——const_cast引发只读数据区域写违例(代码片段)

    对于C++这种强类型的语言,明确的类型既带来了执行的高效,又让错误的发生提前到编译期。所以像const这类体现设计者意图的关键字,可以隐性的透露给我们它描述的对象的使用边界。它是我们的朋友&#x... 查看详情