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

本文整理自白鲸开源联合创始人,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.rhkb.cn/news/448585.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文速看】DL最新进展20241016-低光增强、自动驾驶、图像分割、Diffusion

目录 【低光增强】【自动驾驶】【图像分割】【Diffusion】 【低光增强】 [ACCV 2024] LoLI-Street: Benchmarking Low-Light Image Enhancement and Beyond 论文链接:https://arxiv.org/pdf/2410.09831 代码链接:https://github.com/tanvirnwu/TriFuse …

Pytest+selenium UI自动化测试实战实例

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 今天来说说pytest吧,经过几周的时间学习,有收获也有疑惑,总之最后还是搞个小项目出来证明自己的努力不没有白费 环境准备 1 …

【MySQL】表的查询操作——SELECT

目录 1.select的基本使用 1.1.查询所有列 1.2.查询特定列 1.3.DISTINCT关键字的使用——查询不重复的年级 1.4.带条件的查询 1.5.排序查询结果 1.6.LIMIT的使用——限制返回的行数 1.7.组合使用 WHERE、ORDER BY 和 LIMIT 1.8.查询字段为表达式 1.9.为查询结果指定别名…

攻上云端,独立数据库OceanBase的生存之道

文|白 鸽 编|王一粟 对于很多盲盒爱好者来说,应该都使用过泡泡玛特的线上抽盒机系统,也会发现即使在新品上市时期,其整体抽盲盒的体验也都非常顺畅。 事实上,泡泡玛特的抽盒机系统在2023年经历了一次核心…

【公共祖先】二叉树专题

里面涉及多个plus题 前言1.二叉树的最近公共祖先2.二叉搜索树的最近公共祖先3.二叉树的最近公共祖先II4.二叉树的最近公共祖先III5.二叉树的最近公共祖先IV 前言 公共祖先这一类题目,难度不大,但是非常实用,也是面试问到概率比较大的一类题目…

飞牛NAS未识别到网卡

最新都说国产免费的飞牛NAS非常好用,再也不用搞黑群辉了。 以前也没有搞过NAS,刚好借着这个机会学习一下NAS产品。 在虚拟机上安装,安装还挺顺利,就打算在买来的 也试试,结果系统都安装成功了,但是提示“…

进程通信——管道

文章目录 1. 管道简介2. 无名管道2.1 简介2.2 系统调用2.2.1 无名管道的创建和关闭2.2.2 pipe()2.2.3 无名管道读写说明2.2.4 代码示例 3. 命名管道3.1 简介3.2 mkfifo3.3 对于读进程3.4 对于写进程3.5 代码示例3.5.1 写管道3.5.2 读管道 1. 管道简介 管道是Linux中进程间通信…

物理环境检测及绘制

来解决连续跳跃这个问题,只有在地面上才可以执行跳跃 为了实现这个物理检测,我们需要单独写一个代码,因为除了人物需要检测周围的物理环境以外,我们的敌人也需要检测周围的物理环境,敌人撞墙需要返回继续走&#xff0…

《15分钟轻松学Go》教程目录

在AI快速发展的时代,学习Go语言依然很有用。Go语言擅长处理高并发任务,也就是说可以同时处理很多请求,这对于需要快速响应的AI服务非常重要。另外,Go适合用来处理和传输大量数据,非常适合机器学习模型的数据预处理。 …

linux提权【笔记总结】

文章目录 信息收集通过命令收集信息内核,操作系统,设备信息等用户信息环境信息进程与服务安装的软件服务与插件计划任务查看是否存在明文密码查看与主机的通信信息查看日志信息 通过脚本收集信息LinEnum脚本介绍复现 Linuxprivchecker复现 linux-exploit…

POMO:强化学习的多个最优策略优化(2020)(完)

文章目录 Abstract1 Introduction2 Related work3 Motivation4 多最优策略优化(POMO)4.1 从多个起始节点进行探索4.2 策略梯度的共享基线4.3 用于推理的多个贪婪轨迹5 Experiments5.1 Traveling salesman problem5.2 带容量限制得车辆路径问题5.3 0-1背包问题6 ConclusionAbs…

题目:小金鱼吐泡泡

解题思路: 用栈模拟,创建2个栈,a:字符串的栈,栈顶为s末尾;q:答案栈,与a顶元素互动做相应操作。 陷入的误区:认为可以两个方向可以随意消,但不同方向消得到的结…

AIGC时代 | 揭秘大型语言模型微调:11种高效方法助力模型升级

导读:大型预训练模型是一种在大规模语料库上预先训练的深度学习模型,它们可以通过在大量无标注数据上进行训练来学习通用语言表示,并在各种下游任务中进行微调和迁移。随着模型参数规模的扩大,微调和推理阶段的资源消耗也在增加。…

【H2O2|全栈】JS入门知识(二)

目录 JS 前言 准备工作 运算符 算数运算符 比较运算符 自增、自减运算符 逻辑运算符 运算符的优先级 分支语句 if-else语句 switch语句 三元表达式 结束语 JS 前言 本系列博客主要分享JavaScript的基础语法知识,本期为第二期,包含一些简…

c++应用网络编程之十一Linux下的epoll模式基础

一、epoll模式 在前面分析了select和poll两种IO多路复用的模式,但总体给人的感觉有一种力不从心的感觉。尤其是刚刚接触底层网络开发的程序员,被很多双十一千万并发,游戏百万并发等等已经给唬的一楞一楞的。一听说只支持一两千个并发&#x…

阿里Dataworks使用循环节点和赋值节点完成对mongodb分表数据同步

背景 需求将MongoDB数据入仓MaxCompute 环境说明 MongoDB 100个Collections:orders_1、orders_2、…、orders_100 前期准备 1、MongoDB数据源配置 需要先保证DW和MongoDB网络是能够联通的,需要现在集成任务中配置MongoDB的数据源信息。 具体可以查…

Python OpenCV精讲系列 - 三维重建深入理解(十七)

💖💖⚡️⚡️专栏:Python OpenCV精讲⚡️⚡️💖💖 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计,从基础概念入手,逐步深入到图像处理、特征检测、物体识…

AD9361 在低至 1MHz 的频率下运行

AD9361 在低至 1MHz 的频率下运行 AD -FREQCVT1-EBZ是包含AD9361的FMCOMMS3/4/5板的附加板。虽然完整的芯片级设计包可在此 RF 收发器的ADI产品页面上找到,但有关此卡的信息及其使用方法、围绕它的设计包以及可使其工作的软件可在此处找到。 AD-FREQCVT1-EBZ 模块…

无人机之放电速率篇

无人机的放电速率是指电池在一定时间内放出其储存电能的能力,这一参数对无人机的飞行时间、性能以及安全性都有重要影响。 一、放电速率的表示方法 放电速率通常用C数来表示。C数越大,表示放电速率越快。例如,一个2C的电池可以在1/2小时内放…

储能电源自动化测试系统中不同硬件电路设计对测试结果有哪些影响?-纳米软件

随着能源领域的不断发展,储能电源在各个领域的应用越来越广泛。为了确保储能电源的性能和可靠性,自动化测试系统的重要性日益凸显。其中,硬件电路设计是自动化测试系统的关键组成部分,不同的硬件电路设计会对测试结果产生不同的影…