挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践

点亮 ? Star · 照亮开源之路
GitHub:https://github.com/apache/dolphinscheduler

挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践

文章插图
精彩回顾
近期,初灵科技的大数据开发工程师钟霈合在社区活动的线上 Meetup 上中,给大家分享了《基于 Apache DolphinScheduler 对千亿级数据的应用实践》主题演讲 。
我们对于千亿级数据量的数据同步需求,进行分析和选型后,初灵科技最终决定使用DolphinScheduler进行任务调度,同时需要周期性调度 DataX、SparkSQL 等方式进行海量数据迁移 。在日常大数据工作中,利用DolphinScheduler减少日常运维工作量 。
讲师介绍
挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践

文章插图
?
钟霈合
初灵科技 大数据开发工程师
演讲大纲:
  1. 背景介绍
  2. 海量数据处理
  3. 应用场景
  4. 未来的规划
背景介绍01 自研任务调度我们公司前期一直是用的自研的任务调度框架,随着这个调度领域开源软件的发展,涌现了很多像海豚调度这样非常优秀的任务调度系统 , 而我们的需求已经到了必须要引入新的任务调度系统程度,来保证技术的更新迭代 。
02 需求分析1、支持多租户的权限控制
我们在日常工作中不止研发会进行任务的调度,其他的业务部门和厂商都可能会在DS上跑一些任务 , 如果没有多租户的权限控制的话,那整个集群使用起来都会非常的混乱 。
2、上手简单,支持可视化任务管理
上手简单,因为我们团队内部在很多时候,开发会给到数仓/业务团队去使用 , 如果任务调度上手非常困难,如果需要进行大量的配置或者编写代码,相对成本就要高很多,相信在很多大数据团队都会存在这个需求,并且有些项目需要快速迭代 , 所以对于选型的工具必然是上手简单的 。
3、支持对任务及节点状态进行监控
我们对任务调度原生监控主要有两点需求,第一是服务器的监控,可以直接通过任务调度web页面去看,第二是任务调度的监控 , 针对任务是否成功、执行时间等相关数据和状态能够一目了然 。
4、支持较为方便的重跑、补数
我们数据有实时、周期和离线三部分的,数据特性产生了这个需求,比如对于每15分钟或者每小时的数据任务,如果不能很好的支持重跑和补数的话 , 对我们影响还是比较大的 。
5、支持高可用HA、弹性扩容、故障容错
集群运维和故障管理方面也是需要支持的 。
6、支持时间参数
有时候需要基于时间参数进行数据的ETL周期操作 。
03 任务调度对比
挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践

文章插图
?
Crontab
在Unix和类Unix系统中周期性地执行指令或脚本,用来在Linux上直接执行脚本,但只能用来运行脚本 。
不支持多租户权限管理、平台管理、分发执行等功能,在我们公司中的应用是在一些特点服务器跑一些临时的脚本 。
并且原生Crontab只支持分钟级别的调度,不支持重跑 。
Rundeck
Rundeck是一个基于Java和Grails的开源的运维自动化工具,提供了Web管理界面进行操作,同时提供命令行工具和WebAPI的访问控制方式 。
像Ansible之类的工具一样,Rundeck能够帮助开发和运维人员更好地管理各个节点 。
分为企业版和免费版,免费版对于我们来说功能还是有点欠缺的 。
Quartz
Quartz 是一款开源且丰富特性的任务调度库,是基于Java实现的任务调度框架,能够集成与任何的java应用 。
需要使用Java编程语言编写任务调度,这对于非研发团队而言,是无法去推广使用的 。
xxl-job
是一款国产开发的轻量级分布式调度工具,但功能比海豚调度少 。
其不依赖于大数据组件,而是依赖于MySQL,和海豚调度的依赖项是一样的 。
Elastic-Job
是基于Quartz 二次开发的弹性分布式任务调度系统,初衷是面向高并发且复杂的任务 。
设计理念是无中心化的,通过ZooKeeper的选举机制选举出主服务器,如果主服务器挂了,会重新选举新的主服务器 。
因此elasticjob具有良好的扩展性和可用性,但是使用和运维有一定的复杂度 。
Azkaban
Azkaban也是一个轻量级的任务调度框架,但其缺点是可视化支持不好,任务必须通过打一个zip包来进行实现,不是很方便 。
AirFlow
AirFlow是用Python写的一款任务调度系统,界面很高大上,但不符合中国人的使用习惯 。

推荐阅读