返回 导航

大数据

hangge.com

DolphinScheduler - 核心原理、特点、以及架构详解

作者:hangge | 2025-06-07 09:10

1,什么是 DolphinScheduler?

(1)DolphinScheduler(原 EasyScheduler)是由中国易观公司开源的一款分布式、去中心化、易扩展的可视化 DAG 工作流任务调度平台。该平台致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中“开箱即用”。

(2)DolphinScheduler2021318 日正式成为 Apache 顶级项目,中文名为“海豚调度”。

(3)DolphinScheduler 比较符合中国人的使用习惯,目前在分布式任务调度系统领域也占据一定地位,在国内已经有大量的知名企业和科研机构在使用。

2,DolphinScheduler 的功能

(1)DolphinScheduler 主要用于解决数据研发 ETL 过程中错综复杂的依赖关系、不能直观监控任务健康状态等问题。

(2)DolphinSchedulerDAG 流的方式将 Task 组装起来,可以实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及 Kill 任务等操作,页面效果如下图所示:

3,DolphinScheduler 的特点

  • 高可靠性:去中心化的多 Master 和多 Worker 服务对等架构,避免单 Master 压力过大,另外采用任务缓冲队列来避免过载。
  • 简单易用:提供了 DAG 监控界面,所有流程的定义都是可视化的,通过拖拽任务来定制 DAG,通过 API 方式与第三方系统集成,支持一键部署。
  • 丰富的使用场景:支持多租户,支持暂停恢复操作。紧密贴合大数据生态,支持 SparkHiveMRPythonSub_processShell 等近 20 种任务类型。
  • 高扩展性:支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,MasterWorker 支持动态上下线。

4,DolphinScheduler 的核心架构

(1)DolphinScheduler 的核心架构主要由 MasterServerWorkerServerRegistryAlertAPIUI 这些组件组成:

(2)MasterServer 采用分布式无中心设计理念,MasterServer 主要负责 DAG 任务切分、任务提交监控,并同时监听其它 MasterServerWorkerServer 的健康状态。 MasterServer 服务启动时向 Zookeeper 注册临时节点,通过监听 Zookeeper 临时节点变化来进行容错处理。 MasterServer 基于 netty 提供监听服务。该服务内主要包含:
  • DistributedQuartz:分布式调度组件,主要负责定时任务的启停操作,当 quartz 调起任务后,Master 内部会有线程池具体负责处理任务的后续操作;
  • MasterSchedulerService:是一个扫描线程,定时扫描数据库中的 t_ds_command 表,根据不同的命令类型进行不同的业务操作;
  • WorkflowExecuteRunnable:主要是负责 DAG 任务切分、任务提交监控、各种不同事件类型的逻辑处理;
  • TaskExecuteRunnable:主要负责任务的处理和持久化,并生成任务事件提交到工作流的事件队列;
  • EventExecuteService:主要负责工作流实例的事件队列的轮询;
  • StateWheelExecuteThread:主要负责工作流和任务超时、任务重试、任务依赖的轮询,并生成对应的工作流或任务事件提交到工作流的事件队列;
  • FailoverExecuteThread:主要负责 Master 容错和 Worker 容错的相关逻辑;

(3)WorkerServer 也采用分布式无中心设计理念,WorkerServer 主要负责任务的执行和提供日志服务。 WorkerServer 服务启动时向 Zookeeper 注册临时节点,并维持心跳。 WorkerServer 基于 netty 提供监听服务。该服务包含:
  • WorkerManagerThread:主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;
  • TaskExecuteThread:主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;
  • RetryReportTaskStatusThread:主要负责定时轮询向 Master 汇报任务的状态,直到 Master 回复状态的 ack,避免任务状态丢失;

(4)ZooKeeper 服务:系统中的 MasterServerWorkerServer 节点都通过 ZooKeeper 来进行集群管理和容错。另外系统还基于 ZooKeeper 进行事件监听和分布式锁。 官方也曾经基于 Redis 实现过队列,不过希望 DolphinScheduler 依赖到的组件尽量地少,所以最后还是去掉了 Redis 实现。

(5)AlertServer 提供告警服务,通过告警插件的方式实现丰富的告警手段。

(6)ApiServerAPI 接口层,主要负责处理前端 UI 层的请求。该服务统一提供 RESTful api 向外部提供请求服务。

(7)UI 是系统的前端页面,提供系统的各种可视化操作界面。

5,DolphinScheduler 的运行模式

DolphinScheduler 主要支持以下 3 种运行模式。
  • 单机模式Standalon):不需要额外部署第三方依赖组件,直接运行即可,内置支持 H2DatabaseZookeeper Testing Server
  • 伪集群模式Pseudo-Cluster):需要依赖数据库(PostgreSQLMySQL)和注册中心(ZooKeeper)环境。
  • 集群模式Cluster):基础依赖环境同伪集群模式,唯一的区别是伪集群模式针对的是一台机器,而集群模式针对的是多台机器。
评论

全部评论(0)

回到顶部