暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Apache DolphinScheduler + OceanBase,搭建分布式大数据调度平台的实践

海豚调度 2024-11-11
348
本文整理自白鲸开源联合创始人,Apache DolphinScheduler PMC Chair,Apache Foundation Member 代立冬的演讲。主要介绍了DolphinScheduler及其架构、DolphinScheduler与OceanBase 的联合大数据方案。


DolphinScheduler是什么?

Apache DolphinScheduler,作为一款云原生且配备强大的可视化界面的大数据工作流调度平台,可帮助用户简化数据工作流的编排过程,通过高效解决复杂大数据任务间的依赖与触发难题,确保各类大数据任务能够即插即用,融入各类数据分析与数据挖掘场景中,提供全流程可视化操作能力。

目前,已有超过6000家公司在其生产环境中成功部署并应用了Apache DolphinScheduler。

Apache DolphinScheduler UI 界面

Apache DolphinScheduler 调度平台具备简单易用、架构设计上保证系统高可靠性、高扩展性和云原生能力,拥有丰富的使用场景。

  • 高可靠性
    • 架构设计上,去中心化的多 Master 和多 Worker , 具备高可用能力。
    • 采用任务队列避免过载,不会造成机器卡死。
  • 简单易用
    • 拥有一键部署能力,简化部署,易维护。
    • 可视化界面,所有流程定义都是可视化,通过拖拽任务形成工作流模板。
    • 支持 Open API 、Python 方式与第三方系统对接。
  • ·高扩展性、云原生能力
    • 支持自定义任务类型。
    • 调度能力随集群线性增长。
    • 弹性伸缩, Master 和 Worker 支持动态上下线。
  • 丰富的使用场景
    • 支持暂停恢复及停止等丰富操作。
    • 支持多租户,权限管理等大数据应用场景。
    • 支持 30+ 种任务类型,如 Spark, Flink,Hive, MR, Python, Shell 等。

从 Apache DolphinScheduler 调度平台界面能够看出来,DolphinScheduler 会实时关注任务运行状态,同时,可以直观地看到每个工作流的每个环节,可以轻松在线回溯任务状态。

DolphinSchedule 调度平台采用插件式设计,支持多数据源格式,如OceanBase、MySQL、PostgerSQL、Hive、Impala、Spark、ClickHouse、Oracle、SQLServer、Db2、MongoDB 等可视化的数据源,并支持自由扩展数据源、支持可视化配置。方便数据源统一集中管理,一次配置,到处使用,大大减少配置修改带来的工作量,也方便后续数据血缘关系的处理。

同时,DolphinSchedule 支持多数据源数据的加工、数据导入脚本统一管理,包括 Python、Shell、Jar 包、R 等多种格式。多层级结构确保文件管理层次清晰,不用考虑后续文件应该存储在哪一台机器上,避免资源文件散乱难以维护。

Apache DolphinScheduler 调度平台

此外,DolphinSchedule 调度系统也十分灵活,满足多种业务场景需要,工作流流程支持多策略启动、优先级、告警配置,任务流程多策略支持确保 ETL 过程可管理:

  • 支持任务失败策略选择,失败继续或结束。

  • 支持多种通知策略,包括失败发送通知、成功发送通知、全部通知、全部不发通知。

  • 支持优先级设定,确保高优先级流程优先执行。

  • 支持选定节点执行 ETL 任务流。

  • 支持串行与并行两种执行方式。

架构解析

下图是 Dolphinscheduler 的架构图,最上面的 UI 是用户可以感受到的界面, Open API
可以给 UI 提供调用接口,也方便第三方对接。

对于 Open API
这一层,调度最关键的是 MasterSever 和 WorkerSever ,MasterSever 的职责是分配任务,WorkerSever 的职责是接受 MasterSever 分的任务,然后执行,最后把执行结果汇报给 MasterSever。

由于担心所有的压力都集中在 Active MasterSever
上,因此做了无中心化的设计架构。

ApacheDolphin Scheduler 架构

在最初的架构设计中,MasterSever 和 WorkerSever 完全隔离,WorkerSever 拿到任务之后,把任务更新到数据库里面,导致 WorkerSever 对于数据库造成的压力非常大。

比如联通把省公司的数据都汇总到数据中心,有一百多台的 WorkerSever 节点,WorkerSever 又做了数据库的连接池,数据库的压力会非常大。

WorkerSever 负责执行各种工作流,这也是调度系统经常会用到的,我们希望工作流和工作流之间是有设计方法的,比如数仓按照数仓的分层原则,一层一层之间十分地清晰。

此外,我们有一个依赖类型,这个依赖可以跨项目、跨工作流去依赖其他不同频度的任务,比如说一个天任务,依赖一个小时的任务,这里有一个依赖节点就可以了。

整体上有一个注册中心,WorkerSever 都可以接受注册,WorkerSever 挂了,MasterSever 恢复,MasterSever 挂了,有其他的 MasterSever 监听到,其他的 MasterSever 接受它的工作流,进行故障 MasterSever 恢复。

MasterSever 1.0 时代的设计是无中心化的,遇到的问题是如何让 MasterSever 同时工作。我们先设计了一个简单的方式,先抢锁,然后去工作,跟踪的时候发现 Zookeeper 去充当锁,或是 MasterSever 去充当锁,抢锁的时间需要 50 -60 ms,非常慢。

于是,我们又做了设计上的优化,首先是抢锁,抢到锁之后,把整个工作流界面做成一个图,然后去构建工作流,最终再把每个运行的任务形成任务实例。

这是 1.0 时代的设计,后来发现性能比较低。

1.X版本设计

在 Dolphinscheduler 2.0 时开始找分布式锁,我们根据 MasterSever 的算法,支持多种拓展,来找到它们的槽位。

先去做分片,注册 MasterSever 会生成一个分片编号,Command 是执行的工作流,在去分布式锁的时候进行了这样的一个设计,根据槽位查询数据库,然后会生产工作流的实例,交给 Worker 执行,根据分片的槽位去计算。

去分布式锁设计

1.0 版本对线程的使用非常重,纵使是 8C16G
的机器也需要配置几百个线程。

在 2.0 时代,我们进行了线性模式的拆分、改造。MasterSchedulerService ThreadPool 负责从 Command 表中分片获取要执行的 Command, 构造工作流实例,拆分待执行任务,生成任务实例,提交任务队列,启动WorkFlowExecuteThread
处理。

WorkFlowExecuteThread
工具,负责构建 DAG, DAG 拆分,生成任务实例,提交到任务队列;

同时负责处理任务状态和工作流状态变化,还负责任务/工作流超时监控。

新版本的 Master 端有那些变化呢?

  • 大幅减少 Master 的线程使用。
  • 使用分片机制获取命令队列。
  • 增加状态事件的处理机制。
  • 增加 Master 与 Master 之间的通信,一个 MasterSever 挂了之后,其他的 MasterSever 会互相的通信。
  • 增加 Master 的缓冲机制,不仅仅是在 MasterSever,在 IPASever上也增加了缓存。
Master 线程模型重构—2.X 版本设计

做了系统的架构改造之后,吞吐量提升了 20 倍

当然到了 3.0 版本,提升的倍数更多了。随着架构的演进,吞吐量会有更大的提升。

这也是开源有意思的地方:大家都可以提出自己的想法,把开源最新的思想在项目中实现,并被成千上万的用户使用,在使用中完善项目,这就是开源最大的魅力。

改造后的架构效果—吞吐 20 倍提升

Dolphinscheduler & OceanBase 解决方案

下图是 Dolphinscheduler 和 OceanBase 的解决方案,架构分为三层:

  • 底层是各种文件系统;
  • 中间层是分析引擎如 Spark、Flink、Hive;
  • 上层是应用层;

从存储到采集、计算,到转化,一直到 BI,最后到看到结果的数据,充当了一个箭头的作用。

DolphinScheduler + OceanBase 解决方案

Dolphinscheduler基于 OceanBase 高可用、低成本、高扩展、高性能特性有了一些学习和思考。

由于OceanBase 基于 Paxos 协议保证强一致性,因此我们在做分布事务的时候,数据强一致性以及不重、不丢都是必须要保证的。

另外我们非常看好OceanBase 的一些特性,比如在扩容时,自动实现负载均衡;再比如低成本,无需太多组件,并且可以随时玩起来。

那么,OceanBase 在 DolphinScheduler 里发挥了什么作用呢?

首先,作为 DolphinScheduler 的数据源,方便用户更简单快捷创建 SQL 任务。

数据存储在 OceanBase 里,简化数据工作流处理,方便把整个工作流串联起来,用 SQL 进行处理,所以我们对于 SQL 也做了很多的优化,包括执行多少个 SQL,做了很多的设计。

得益于 OceanBase 数据源的高扩展能力,结合 OceanBase 高压缩比的低成本优势,让用户在大规模使用时受益。

其次,作为 DolphinScheduler 元数据基础依赖,存放 DolphinScheduler 本身的各项关键信息。

Dolphinscheduler 底层的表数据量增量非常快,但是调度的任务一般不能删,需要保存一两年数据的时候,整体数据量相当复杂,原来尝试使用普通表存储,但是汇总数据的时候很麻烦。

现在我们用一个分布式数据库存储,让 OceanBase 充当元数据库,保证调度系统的稳定性。当然,在稳定性上我们会慎之又慎,需要做很多的稳定性测试,也希望有更多的社区小伙伴可以加入共同测试。

Apache DolphinScheduler Use Case

Dolphinscheduler 在海内外拥有丰富的用户基础,如中国联通、Shein、荔枝 PM、360 等,希望Dolphinscheduler 调度系统能为更多的用户带来便利。

Dolphinscheduler 有一个很出名的口号:工具选的好、下班回家早、调度用的对,半夜安心睡。希望调度系统和 AI 的结合,可以为大家的业务赋能,为大家的身体松绑。

让中国的开源真正地走向全球,让更多人知道中国的开源项目也很厉害,是我们的愿景。欢迎大家参与到社区讨论和共建里来,参与到中国开源项目的建设中来。

附:

  • OceanBase GitHub项目地址:https://github.com/oceanbase/oceanbase
  • Dolphinscheduler 项目地址:https://github.com/apache/dolphinscheduler*
  • Dolphinscheduler 官网:  https://dolphinscheduler.apache.org

<🐬🐬 >

推荐阅读

用户实践案例
奇富科技  蜀海供应链 联通数科 拈花云科
蔚来汽车 长城汽车 集度 长安汽车
思科网讯 生鲜电商 联通医疗 联想
新网银行 消费金融  腾讯音乐 自如
有赞 伊利 当贝大数据
联想 传智教育 Bigo
通信行业  作业帮 太美医疗
某新能源 中电信翼康 每日互动
迁移实践
Azkaban   Ooize   
Airflow (有赞案例) Air2phin(迁移工具)
Airflow迁移实践
Apache DolphinScheduler 3.0.0 升级到 3.1.8 教程
Apache DolphinScheduler 1.3.4升级至3.1.2版本解决方案合集

新手入门
选择Apache DolphinScheduler的10个理由
Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻松拿捏!
Apache DolphinScheduler 如何实现自动化打包+单机/集群部署?
Apache DolphinScheduler-3.1.3 版本安装部署详细教程
Apache DolphinScheduler 在大数据环境中的应用与调优

< 🐬🐬 >
参与社区


参与Apache 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/community/development/contribute.html

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的!

文章转载自海豚调度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论