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

news2024/10/26 20:31:26
本文整理自白鲸开源联合创始人,Apache DolphinScheduler PMC Chair,Apache Foundation Member 代立冬的演讲。主要介绍了DolphinScheduler及其架构、DolphinScheduler与OceanBase 的联合大数据方案。

DolphinScheduler是什么?

Apache DolphinScheduler,作为一款云原生且配备强大的可视化界面的大数据工作流调度平台,可帮助用户简化数据工作流的编排过程,通过高效解决复杂大数据任务间的依赖与触发难题,确保各类大数据任务能够即插即用,融入各类数据分析与数据挖掘场景中,提供全流程可视化操作能力。目前,已有超过3000家公司在其生产环境中成功部署并应用了Apache DolphinScheduler。

1691481150

Apache DolphinScheduler UI 界面

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

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

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

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

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

1691481353

Apache DolphinScheduler 调度平台

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

  • ·支持任务失败策略选择,失败继续或结束。
  • ·支持多种通知策略,包括失败发送通知、成功发送通知、全部通知、全部不发通知。
  • ·支持优先级设定,确保高优先级流程优先执行。

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

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

Dolphinscheduler 架构解析

下图是 Dolphinscheduler 的架构图,最上面的 UI 是用户可以感受到的界面, Open API 可以给 UI 提供调用接口,也方便第三方对接。对于 Open API 这一层,调度最关键的是 MasterSever 和 WorkerSever ,MasterSever 的职责是分配任务,WorkerSever 的职责是接受 MasterSever 分的任务,然后执行,最后把执行结果汇报给 MasterSever。由于担心所有的压力都集中在 Active MasterSever 上,因此做了无中心化的设计架构。

1691481459

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 时代的设计,后来发现性能比较低。 

1691481491

—1.X原先设计

在 Dolphinscheduler 2.0 时开始找分布式锁,我们根据 MasterSever 的算法,支持多种拓展,来找到它们的槽位。先去做分片,注册 MasterSever 会生成一个分片编号,Command 是执行的工作流,在去分布式锁的时候进行了这样的一个设计,根据槽位查询数据库,然后会生产工作流的实例,交给 Worker 执行,根据分片的槽位去计算。这就是去分布式锁设计。

1691481503

去分布式锁设计—新版本设计

1.0 版本对线程的使用非常重,纵使是 8C16G 的机器也需要配置几百个线程。在 2.0 时代,我们进行了线性模式的拆分、改造。MasterSchedulerService ThreadPool 负责从 Command 表中分片获取要执行的 Command, 构造工作流实例,拆分待执行任务,生成任务实例,提交任务队列,启动 WorkFlowExecuteThread 处理。WorkFlowExecuteThread工具,负责构建 DAG, DAG 拆分,生成任务实例,提交到任务队列;同时负责处理任务状态和工作流状态变化,还负责任务/工作流超时监控。

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

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

1691481553

Master 线程模型重构—2.X 版本设计

做了系统的架构改造之后,吞吐量提升了 20 倍。当然到了 3.0 版本,提升的倍数会更多。随着架构的演进,吞吐量会有更大的提升。这也正式开源有意思的地方:大家都可以提出自己的想法,把开源最新的思想在项目中实现,并被成千上万的用户使用,在使用中完善项目,这就是开源最大的魅力。

1691481564

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

Dolphinscheduler & OceanBase 解决方案

下图是 Dolphinscheduler 和 OceanBase 的解决方案,架构分为三层,底层是各种文件系统,中间层是分析引擎如 Spark、Flink、Hive;上层是应用层。从存储到采集、计算,到转化,一直到 BI,最后到看到结果的数据,充当了一个箭头的作用。

1691481575

DolphinScheduler + OceanBase 解决方案

Dolphinscheduler基于 OceanBase 高可用、低成本、高扩展、高性能特性有了一些学习和思考。由于OceanBase 基于 Paxos 协议保证强一致性,因此我们在做分布事务的时候,数据强一致性以及不重、不丢都是必须要保证的。另外我们非常看好OceanBase 的一些特性,比如在扩容时,自动实现负载均衡;再比如低成本,无需太多组件,并且可以随时玩起来。

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

首先,作为 DolphinScheduler 的数据源,方便用户更简单快捷创建 SQL 任务。数据存储在 OceanBase 里,简化数据工作流处理,方便把整个工作流串联起来,用 SQL 进行处理,所以我们对于 SQL 也做了很多的优化,包括执行多少个 SQL,做了很多的设计。得益于 OceanBase 数据源的高扩展能力,结合 OceanBase 高压缩比的低成本优势,让用户在大规模使用时受益。

其次,作为 DolphinScheduler 元数据基础依赖,存放 DolphinScheduler 本身的各项关键信。Dolphinscheduler 底层的表数据量增量非常快,但是调度的任务一般不能删,需要保存一两年数据的时候,整体数据量相当复杂,原来尝试使用普通表存储,但是汇总数据的时候很麻烦。现在我们用一个分布式数据库存储,让 OceanBase 充当元数据库,保证调度系统的稳定性。当然,在稳定性上我们会慎之又慎,需要做很多的稳定性测试,也希望有更多的社区小伙伴可以加入共同测试。

DolphinScheduler Roadma

DolphinScheduler Roadma 依照社区需求和关注度来安排功能优先级, 做哪些功能由邮件讨论决定。我们计划动态任务插件支持、支持远程任务调度、Remote Task、更好支持 Streaming Task、K8S Operator、更好支持 Streaming Task、Easy to use(更多请参考:https://github.com/apache/dolphinscheduler/issues/13459)。在今年,我们支持 SeaTunnel Zeta 引擎选择,SeaTunnel Zeta 是我们花了10个月、投入了上百人研发的另外一个数据平台的产品,是 SeaTunnel 专有的同步引擎。

1691481592

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十六章 RabbitMQ延迟消息之延迟插件优化

目录 一、引言 二、优化方案 三、核心代码实现 3.1. 生产者代码 3.2. 消息处理器 3.3. 自定义多延迟消息封装类 3.4. 订单实体类 3.5. 消费者代码 四、运行效果 一、引言 上一章节我们提到,直接使用延迟插件,创建一个延迟指定时间的消息&…

一款零依赖、跨平台的流媒体协议处理工具,支持 RTSP、WebRTC、RTMP 等视频流协议的处理

大家好,今天给大家分享一款功能强大的流媒体协议处理工具go2rtc,支持多种协议和操作系统,具有零依赖、零配置、低延迟等特点。 项目介绍 go2rtc可以从各种来源获取流,包括 RTSP、WebRTC、HomeKit、FFmpeg、RTMP 等,并…

第一个servlet程序

文章目录 在原有工程上建立模块前端配置前后端映射关系添加外部依赖库后端代码启动配置 在原有工程上建立模块 添加web框架 前端 应用结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>第一…

【云原生技术】Docker容器进阶知识

文章目录 namespace概述一、namespace的基本概念二、namespace的主要作用三、namespace的类型四、namespace的操作五、namespace在容器技术中的应用 cgroup一、cgroup的基本概念二、cgroup的主要功能三、cgroup的子系统介绍四、cgroup的应用场景五、cgroup的使用与管理 cgroup和…

uniapp-小程序开发0-1笔记大全

uniapp官网&#xff1a; https://uniapp.dcloud.net.cn/tutorial/syntax-js.html uniapp插件市场&#xff1a; https://ext.dcloud.net.cn/ uviewui类库&#xff1a; https://www.uviewui.com/ 柱状、扇形、仪表盘库&#xff1a; https://www.ucharts.cn/v2/#/ CSS样式&…

余 弦 曲 线

1&#xff0e;问题描述 在屏幕上画出余弦函数cos&#xff08;x&#xff09;曲线&#xff0c;如图1.6所示。 图1.6 余弦函数cos&#xff08;x&#xff09;曲线 2&#xff0e;问题分析 连续的曲线是由点组成的,点与点之间距离比较近&#xff0c;看上去就是曲线了&#xff0c;…

uni-app 如何全局设置,获取app.vue里面的值

在globalData里设置一个值 通过下面方法修改 this.$options.globalData.$versonStatus status 在页面中通过getApp()获取 getApp().globalData.$versonStatus

<<迷雾>> 第11章 全自动加法计算机(3)--存储器示例 示例电路

info::操作说明 将一组比特单元扩展为多组的结果, 操作原理类似 注: 一次只能操作一组, 此处需进一步引入地址译码器才能具体进行操作, 见后面的例子, 此处仅展示结构原理 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdm…

C++模板初阶速成

温馨提示&#xff1a;本篇文章依旧是c速成系列的文章&#xff0c;但和以往有所不同的是&#xff0c;本篇文章带大家简单了解并能够学会使用模板 泛型编程 概念&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。 什么是复用&#xff1f; 简单来说就是…

分组相关 -- EoO原理

EoO (Ethernet over OTN) 是将以太网信号处理后&#xff0c;经过封装、映射后上OTN系统&#xff0c;通过WDM通道来传送的技术。传统的OTN承载ETH专线&#xff0c;不支持限速&汇聚等场景。引入EoO技术后&#xff0c;支持LAG、QoS、OAM等L2层的功能特性&#xff0c;实现端口限…

RBTree(红黑树)的介绍和实现

欢迎来到杀马特的主页&#xff1a;羑悻的小杀马特.-CSDN博客 目录 ​编辑 一红黑树介绍&#xff1a; 1.1红黑树概念&#xff1a; 1.2红黑树遵循的原则&#xff1a; 1.3红黑树效率分析&#xff1a; 二.红黑树的实现&#xff1a; 2.1红黑树结构&#xff1a; 2.2红黑树节点…

TMGM:下周全球市场分析

本周&#xff0c;美国股市表现强劲&#xff0c;标普500指数和道琼斯工业平均指数均刷新了历史最高记录。这一涨势得到了美联储公开市场委员会&#xff08;FOMC&#xff09;会议纪要的支撑&#xff0c;纪要显示大部分官员都支持9月份实施重大的50个基点降息。 在澳大利亚&#…

宝安网站建设中的响应式设计

宝安网站建设中的响应式设计 在数字化时代&#xff0c;网站已成为企业展示形象、吸引客户的重要平台。而在宝安地区&#xff0c;随着互联网的发展&#xff0c;越来越多的企业意识到响应式设计的重要性。响应式设计不仅能够提升用户体验&#xff0c;还能为企业带来更大的市场竞争…

.NET 一款通过DCOM实现系统提权的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

2024年恩施职称评前公示

此次公示共有422人&#xff0c;初级职称、中级职称、馆员、畜牧师、助理馆员、三级演员、农艺师等均在一起进行评审前的公示。 根据恩施州职称改革工作领导小组办公室《关于报送2024年度恩施州中初级专业技术职务评审材料的通知》&#xff08;恩施州职改办〔2024〕14号&#xf…

04 什么是线性表

什么是线性表 一、为什么需要线性表 例如&#xff1a; ​ 在程序中保存指定班级的所有的学生信息&#xff08;暂时只需要处理姓名、年龄&#xff09;&#xff0c;该班级最多可容纳30人&#xff0c;且可进行数量上的增减。 业务功能&#xff1a; ​ 1&#xff09;这个项目中…

【分布式架构】分布式锁Redission

一、流程图 二、lua脚本实现原理 由setnxexpire实现 setnx&#xff1a;判断key是否存在&#xff0c;如果不存在&#xff0c;则获取锁 setnx的数据结构&#xff1a;<key,<key1,value>> key&#xff1a;业务声明的key key1&#xff1a;线程id value&#xff1a;次数…

css 翻页效果

有一个项目&#xff0c;页面切换的时候要翻页效果。 所以有一个简单的demo&#xff0c;提供给大家学习 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdev…

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }

空间计算:现实与数字世界的无缝融合

随着增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;、物联网&#xff08;IoT&#xff09;和人工智能&#xff08;AI&#xff09;的不断进步&#xff0c;空间计算&#xff08;Spatial Computing&#xff09;作为一种新兴技术&#xff0c;正在成为人们…