DolphinScheduler 1.介绍与单节点部署


  • 本文档部署了最新的 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 架构图

DolphinScheduler 架构图

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掉正在运行的并行任务,流程失败结束
补数 补历史数据,支持区间并行串行两种补数方式,其日期选择方式包括日期范围日期枚举两种

glossary

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 106 2018 bin
-r--r--r--. 1 10 143     3244 106 2018 COPYRIGHT
drwxr-xr-x. 3 10 143      132 106 2018 include
-rw-r--r--. 1 10 143  5207154 912 2018 javafx-src.zip
drwxr-xr-x. 5 10 143      185 106 2018 jre
drwxr-xr-x. 5 10 143      245 106 2018 lib
-r--r--r--. 1 10 143       40 106 2018 LICENSE
drwxr-xr-x. 4 10 143       47 106 2018 man
-r--r--r--. 1 10 143      159 106 2018 README.html
-rw-r--r--. 1 10 143      424 106 2018 release
-rw-r--r--. 1 10 143 21101479 106 2018 src.zip
-rw-r--r--. 1 10 143   108062 912 2018 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 10 143   155003 106 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 目录下,其中包括

  1. standalone-server/libs/standalone-server/
  2. tools/libs/
  3. api-server/libs
  4. alert-server/libs
  5. master-server/libs
  6. worker-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.

dolphinscheduler 在 MySQL 中的元数据

6.5 启动 standalone-server

此时你已经连接上mysql,重启 或 停止 standalone-server 并不会清空您数据库里的数据

# 启动 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh start standalone-server

进入下面的页面说明已经安装成功

系统主页


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
  目录