- 本文档部署了最新的 3.14 版本, 官网上的部署文档有些错误, 本文中进行了修复
1. DolphinScheduler 简介
Apache DolphinScheduler 官网地址: https://dolphinscheduler.apache.org/zh-cn
Apache DolphinScheduler 是一个分布式易扩展的可视化工作流任务调度,平台致力于解决数据处理流程中错综复杂的依赖关系,适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。
Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinScheduler 以 DAG( Directed Acyclic Graph,DAG ,有向无环图)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。
有向无环图是一种图形数据结构,其中的边具有方向性,且不存在任何从一个顶点出发经过若干边回到该顶点的环路。换句话说,它是一个有向图,其中所有的边都有一个方向,并且图中不存在回路。
在有向无环图中,每个顶点表示一个实体,每个有向边表示实体之间的关系或依赖。由于不存在回路,有向无环图可以表示具有线性、分支或其他更复杂拓扑结构的依赖关系。在计算机科学和数据处理领域,有向无环图具有广泛应用,如编译器的优化、任务调度、数据流编程、贝叶斯网络等。
2. 特性
简单易用:DAG监控界面,所有流程定义都是可视化,通过拖拽任务完成定制DAG,通过API方式与第三方系统集成。一
键部署
高可靠性:去中心化的多Master和多Worker股务对尊架构避免单Master压力过大,另外采用任务缓冲队列来道免过载
高扩展性:支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和和Worker支持动态上下线
丰富的使用场景:支持多租户,支持暂停恢复提作。景密贴合大数据生态,提供Spark,Hive。M/R,Python,shell等近20种任务类型
简单易用
可视化 DAG: 用户友好的,通过拖拽定义工作流的,运行时控制工具
模块化操作: 模块化有助于轻松定制和维护。
丰富的使用场景
支持多种任务类型: 支持Shell、MR、Spark、SQL 等20余种任务类型,支持跨语言,易于扩展
丰富的工作流操作: 工作流程可以定时、暂停、恢复和停止,便于维护和控制全局和本地参数。
高可靠性(High Reliability): 去中心化设计,确保稳定性。 原生 HA 任务队列支持,提供过载容错能力。 DolphinScheduler 能提供高度稳健的环境。
高扩展性(High Scalability): 支持多租户和在线资源管理。支持每天10万个数据任务的稳定运行。
3. 架构概览
3.1 架构图

3.2 组件说明
3.2.1 MasterServer
MasterServer 采用分布式无中心设计理念,MasterServer 主要负责 DAG 任务切分、任务提交监控,并同时监听其它 MasterServer 和WorkerServer 的健康状态。 MasterServer 服务启动时向 Zookeeper 注册临时节点,通过监听 Zookeeper 临时节点变化来进行容错处理。 MasterServer 基于 netty 提供监听服务。
该服务内主要包含:
- **DistributedQuartz :**分布式调度组件,主要负责定时任务的启停操作,当 quartz 调起任务后,Master 内部会有线程池具体负责处理任务的后续操作;
- **MasterSchedulerService :**是一个扫描线程,定时扫描数据库中的
t_ds_command表,根据不同的命令类型进行不同的业务操作; - **WorkflowExecuteRunnable :**主要是负责DAG任务切分、任务提交监控、各种不同事件类型的逻辑处理;
- **TaskExecuteRunnable :**主要负责任务的处理和持久化,并生成任务事件提交到工作流的事件队列;
- **EventExecuteService :**主要负责工作流实例的事件队列的轮询;
- **StateWheelExecuteThread :**主要负责工作流和任务超时、任务重试、任务依赖的轮询,并生成对应的工作流或任务事件提交到工作流的事件队列;
- **FailoverExecuteThread :**主要负责 Master 容错和 Worker 容错的相关逻辑;
3.2.2 WorkerServer
WorkerServer 也采用分布式无中心设计理念,WorkerServer 主要负责任务的执行和提供日志服务。 WorkerServe r服务启动时向Zookeeper 注册临时节点,并维持心跳。 WorkerServer 基于 netty 提供监听服务。
该服务包含:
- **WorkerManagerThread :**主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;
- **TaskExecuteThread :**主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;
- **RetryReportTaskStatusThread :**主要负责定时轮询向Master汇报任务的状态,直到 Master 回复状态的 ack,避免任务状态丢失;
3.2.3 LoggerServer
LoggerServer 提供任务执行日志查看功能,可以实现直接在UI页面查看任务日志,而无需再去服务器中查看
3.2.4 ZooKeeper
ZooKeeper 服务,系统中的 MasterServer 和 WorkerServer 节点都通过 ZooKeeper 来进行集群管理和容错。另外系统还基于ZooKeeper 进行事件监听和分布式锁。 之前的版本曾经基于 Redis 实现过队列,不过希望 DolphinScheduler 依赖到的组件尽量地少,所以最后还是去掉了 Redis 实现。
3.2.5 AlertServer
提供告警服务,通过不同告警插件的方式实现Email、微信、短信等告警手段。
3.2.6 ApiServer
API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。
3.2.7 UI
系统的前端页面,提供系统的各种可视化操作界面。
4. 名词解释
在对 Apache DolphinScheduler 了解之前,我们先来认识一下调度系统常用的名词
| 名词 | 释义 |
|---|---|
| DAG | 全称 Directed Acyclic Graph,简称 DAG。工作流中的 Task 任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图: |
| 流程定义 | 通过拖拽任务节点并建立任务节点的关联所形成的可视化 DAG |
| 流程实例 | 流程实例是流程定义的实例化,可以通过手动启动或定时调度生成。每运行一次流程定义,产生一个流程实例 |
| 任务实例 | 任务实例是流程定义中任务节点的实例化,标识着某个具体的任务 |
| 任务类型 | 目前支持有 SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中 SUB_PROCESS类型的任务需要关联另外一个流程定义,被关联的流程定义是可以单独启动执行的 |
| 调度方式 | 系统支持基于 cron 表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。 其中 恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用 |
| 定时调度 | 系统采用 quartz 分布式调度器,并同时支持cron表达式可视化的生成 |
| 依赖 | 系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖 |
| 优先级 | 支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出 |
| 邮件告警 | 支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知 |
| 失败策略 | 对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束 |
| 补数 | 补历史数据,支持区间并行和串行两种补数方式,其日期选择方式包括日期范围和日期枚举两种 |

5. 部署前的准备
5.1 环境建议
5.1.1 软硬件环境建议配置
DolphinScheduler 作为一款开源分布式工作流任务调度系统,可以很好地部署和运行在 Intel 架构服务器及主流虚拟化环境下,并支持主流的 Linux 操作系统环境
5.1.2 Linux 操作系统版本要求
| 操作系统 | 版本 |
|---|---|
| Red Hat Enterprise Linux | 7.0 及以上 |
| CentOS | 7.0 及以上 |
| Oracle Enterprise Linux | 7.0 及以上 |
| Ubuntu LTS | 16.04 及以上 |
注意: 以上 Linux 操作系统可运行在物理服务器以及 VMware、KVM、XEN 主流虚拟化环境上
5.1.3 服务器建议配置
DolphinScheduler 支持运行在 Intel x86-64 架构的 64 位通用硬件服务器平台。对生产环境的服务器硬件配置有以下建议:
5.1.4 生产环境
| CPU | 内存 | 硬盘类型 | 网络 | 实例数量 |
|---|---|---|---|---|
| 4核+ | 8 GB+ | SAS | 千兆网卡 | 1+ |
注意:
- 以上建议配置为部署 DolphinScheduler 的最低配置,生产环境强烈推荐使用更高的配置
- 硬盘大小配置建议 50GB+ ,系统盘和数据盘分开
5.1.5 网络要求
DolphinScheduler正常运行提供如下的网络端口配置:
| 组件 | 默认端口 | 说明 |
|---|---|---|
| MasterServer | 5678 | 非通信端口,只需本机端口不冲突即可 |
| WorkerServer | 1234 | 非通信端口,只需本机端口不冲突即可 |
| ApiApplicationServer | 12345 | 提供后端通信端口 |
注意:
- MasterServer 和 WorkerServer 不需要开启网络间通信,只需本机端口不冲突即可
- 管理员可根据实际环境中 DolphinScheduler 组件部署方案,在网络侧和主机侧开放相关端口
5.1.6 客户端 Web 浏览器要求
DolphinScheduler 推荐 Chrome 以及使用 Chromium 内核的较新版本浏览器访问前端可视化操作界面
5.2 部署模式介绍
DolphinScheduler 支持多种部署模式,包括 单机模式(Standalone)、伪集群模式(Pseudo-Cluster)、集群模式(Cluster) 等。
- 单模式
单机模式(standalone)模式下,所有服务均集中于一个 StandaloneServer 进程中,并且其中内置了注册中心 Zookeeper 和数据库 H2。只需配置 JDK 环境,就可一键启动DolphinScheduler,快速体验其功能。
- 伪集群模式
伪集群模式+(Pseudo-Cluster)是在单台机器部署 DolphinScheduler 各项服务,该模式下master、worker、apiserver、logger server 等服务都只在同一台机器上。Zookeeper 和 数据库需单独安装并进行相应配置。
单机模式跟为集群模式的区别, 单机模式所有服务在一个进程中, 为集群不同服务在不同进程中
- 集群模式
集群模式(Cluster)与伪集群模式的区别就是在多台机器部署 DolphinScheduler 各项服务,并且 Master、Worker 等服务可配置多个。
5.3 安装jdk
JDK:下载 JDK1.8+,如果你是集群安装Dolphin Scheduler,那么在集群的每一个节点都需要安装JDK,安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中。并确保 JAVA_HOME 正确配置,如果你的环境中已存在,可以跳过这步。
# 解压安装包
[root@node2 jdk1.8.0_191] tar -zxvf jdk-8u191-linux-x64.tar.gz
root@node2 opt] cd jdk1.8.0_191/
[root@node2 jdk1.8.0_191] ll
总用量 25976
drwxr-xr-x. 2 10 143 4096 10月 6 2018 bin
-r--r--r--. 1 10 143 3244 10月 6 2018 COPYRIGHT
drwxr-xr-x. 3 10 143 132 10月 6 2018 include
-rw-r--r--. 1 10 143 5207154 9月 12 2018 javafx-src.zip
drwxr-xr-x. 5 10 143 185 10月 6 2018 jre
drwxr-xr-x. 5 10 143 245 10月 6 2018 lib
-r--r--r--. 1 10 143 40 10月 6 2018 LICENSE
drwxr-xr-x. 4 10 143 47 10月 6 2018 man
-r--r--r--. 1 10 143 159 10月 6 2018 README.html
-rw-r--r--. 1 10 143 424 10月 6 2018 release
-rw-r--r--. 1 10 143 21101479 10月 6 2018 src.zip
-rw-r--r--. 1 10 143 108062 9月 12 2018 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 10 143 155003 10月 6 2018 THIRDPARTYLICENSEREADME.txt
[root@node2 jdk1.8.0_191] pwd
/opt/jdk1.8.0_191
[root@node2 jdk1.8.0_191]
# 配置环境变量
[root@node2 jdk1.8.0_191] vim /etc/profile
# 文件底部增加如下配置
# jdk 安装地址
export JAVA_HOME=/opt/jdk1.8.0_191
PATH=$PATH:$JAVA_HOME/bin
# 刷新配置文件
[root@node2 jdk1.8.0_191] source /etc/profile
# 打印Java home
[root@node2 jdk1.8.0_191] echo $JAVA_HOME
/opt/jdk1.8.0_191
# 查看 java 版本进行验证
[root@node2 jdk1.8.0_191] java -version
# 打印除下列 java 版本信息 说明jdk安装成功
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
5.4 下载安装文件
可以根据你的需要选择不同的版本,下载安装包地址如下:
安装包下载地址: https://dolphinscheduler.apache.org/zh-cn/download
把下载好的安装包上传到服务器上
6. 单节点安装
Standalone 仅适用于 DolphinScheduler 的快速体验.
如果你是新手,想要体验 DolphinScheduler 的功能,推荐使用Standalone方式体检。如果你想体验更完整的功能,或者更大的任务量,推荐使用 伪集群部署 。如果你是在生产中使用,推荐使用集群部署 或者 kubernetes
注意: 单节点模式仅建议 20 个以下工作流使用,因为其采用内存式的 H2 Database, Zookeeper Testing Server,任务过多可能导致不稳定,并且如果重启或者停止 standalone-server 会导致内存中数据库里的数据清空。 如果您要连接外部数据库,比如 mysql 或者postgresql,请看配置数据库
6.1 解压并启动 DolphinScheduler
二进制压缩包中有 standalone 启动的脚本,解压后即可快速启动。切换到有 sudo 权限的用户,运行脚本
# 解压并运行 Standalone Server
[root@node2 opt]# tar -zxvf apache-dolphinscheduler-3.1.4-bin.tar.gz
# 进入到 DolphinScheduler 安装路径
[root@node2 opt]# cd apache-dolphinscheduler-3.1.4-bin/
# 执行启动脚本
[root@node2 apache-dolphinscheduler-3.1.4-bin]# bin/dolphinscheduler-daemon.sh start standalone-server
Begin start standalone-server......
starting standalone-server, logging to /opt/apache-dolphinscheduler-3.1.4-bin/standalone-server/logs
Overwrite standalone-server/conf/dolphinscheduler_env.sh using bin/env/dolphinscheduler_env.sh.
End start standalone-server.
# 查看运行进程
[root@node2 apache-dolphinscheduler-3.1.4-bin]# jps -l | grep dolphinscheduler
8285 org.apache.dolphinscheduler.StandaloneServer
6.2 访问系统
浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 即可登录系统UI
默认的用户名和密码是 admin / dolphinscheduler123


6.3 启停服务
脚本 ./bin/dolphinscheduler-daemon.sh 除了可以快捷启动 standalone 外,还能停止服务运行,全部命令如下
# 启动 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
# 停止 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh stop standalone-server
6.4 切换元数据库
Standalone server 使用 H2 数据库作为其元数据存储数据,这是为了上手简单,用户在启动服务器之前不需要启动数据库。但是如果用户想将元数据库存储在 MySQL 或 PostgreSQL 等其他数据库中,他们必须更改一些配置。我们这里以 MySQL 为例来说明如何配置外部数据库。
6.4.1 上传驱动
将 MySQL 的驱动包上传到 DolphinScheduler 的每个模块的 libs 目录下,其中包括
standalone-server/libs/standalone-server/tools/libs/api-server/libsalert-server/libsmaster-server/libsworker-server/libs
6.4.2 修改配置
- 修改
bin/env/dolphinscheduler_env.sh设定下列环境变量,修改如下配置:
vim bin/env/dolphinscheduler_env.sh
export DATABASE=mysql
export SPRING_PROFILES_ACTIVE=jdbc:mysql://192.168.1.73:3306/ds1?useUnicode=true&characterEncoding=UTF-8&useSSL=false
export SPRING_DATASOURCE_USERNAME=root
export SPRING_DATASOURCE_PASSWORD=root123
- 修改
tools/conf/application.yaml中 MySQL 的相关配置
vim tools/conf/application.yaml
# 修改下面的 mysql url 跟前面的配置保持一致
---
spring:
config:
activate:
on-profile: mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.73:3306/ds1?useUnicode=true&characterEncoding=UTF-8
- 修改
standalone-server/conf/application.yaml中的 MySQL 相关配置
vim standalone-server/conf/application.yaml
---------
spring:
config:
activate:
on-profile: mysql
sql:
init:
schema-locations: classpath:sql/dolphinscheduler_mysql.sql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.73:3306/ds1?useUnicode=true&characterEncoding=UTF-8
username: root
password: root@123
6.4.3 初始化数据库
bash tools/bin/upgrade-schema.sh
...
2023-03-27 08:00:19.540 INFO 10055 --- [ main] o.a.d.common.utils.ScriptRunner : sql: CREATE TABLE `t_ds_fav_task` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'favorite task id', `task_name` varchar(64) NOT NULL COMMENT 'favorite task name', `user_id` int NOT NULL COMMENT 'user id', PRIMARY KEY (`id`) ) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8
2023-03-27 08:00:20.208 INFO 10055 --- [ main] .d.UpgradeDolphinScheduler$UpgradeRunner : init DolphinScheduler finished
2023-03-27 08:00:20.216 INFO 10055 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : DolphinScheduler - Shutdown initiated...
2023-03-27 08:00:20.220 INFO 10055 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : DolphinScheduler - Shutdown completed.

6.5 启动 standalone-server
此时你已经连接上mysql,重启 或 停止 standalone-server 并不会清空您数据库里的数据
# 启动 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
进入下面的页面说明已经安装成功
