热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ApacheDolphinScheduler是如何诞生的

本文是迄今为止关于ApacheDolphinScheduler诞生的前因后果最详细的介绍,感


点击上方蓝字关注ALC Beijing

作者 | 代立冬,李岗

排版 | 开源之道小助理


Apache 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 在易观千帆(一款APP对标分析产品)成功上线使用。

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 社区, 我们一起披荆斩棘、一起高歌猛进!一起经历风雨、一起见证中国开源崛起!



欢迎加入APachec dolphinscheduler社区


  • https://github.com/apache/incubator-dolphinscheduler (请记得fork和star)


订阅邮件列表


  • 用自己的邮箱向dev-subscribe@dolphinscheduler.apache.org发送一封邮件,主题和内容任意。

  • 接收确认邮件并回复。完成步骤1后,将收到一封来自dev-help@dolphinscheduler.apache.org的确认邮件(如未收到,请确认邮件是否被自动归入垃圾邮件、推广邮件、订阅邮件等文件夹)。然后直接回复该邮件,或点击邮件里的链接快捷回复即可,主题和内容任意。

  • 接收欢迎邮件。完成以上步骤后,会收到一封主题为WELCOME to dev@dolphinscheduler.apache.org的欢迎邮件,至此已成功订阅Apache DolphinScheduler(Incubating)的邮件列表。


在线试用

如果您不想部署,而是想先体验一下,那么我们也提供了在线 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 会员。




参考链接

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

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

















戳原文,立刻奔向 
DolphinScheduler 的 github 仓库一起玩耍~






推荐阅读
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Zookeeper 总结与面试题汇总
    Zookeeper总结与面试题汇总,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • Harmony 与 Game Space 达成合作,在 Shard1 上扩展 Web3 游戏
    旧金山20 ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
  • Java开发实战讲解!字节跳动三场技术面+HR面
    二、回顾整理阿里面试题基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。自我介绍JVM如何加载一个类的过程,双亲委派模型中有 ... [详细]
  • 分布式大型互联网企业架构!
    2019独角兽企业重金招聘Python工程师标准摘要:开发工具1.EclipseIDE:采用Maven项目管理,模块化。2.代码生成: ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
author-avatar
倒带灬樱花巷_317
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有