本文档部署了最新的 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 正确配置,如果你的环境中已存在,可以跳过这步。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [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 export JAVA_HOME=/opt/jdk1.8.0_191PATH=$PATH :$JAVA_HOME /bin [root@node2 jdk1.8.0_191] source /etc/profile [root@node2 jdk1.8.0_191] echo $JAVA_HOME /opt/jdk1.8.0_191 [root@node2 jdk1.8.0_191] java -version 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 权限的用户,运行脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 解压并运行 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 外,还能停止服务运行,全部命令如下
1 2 3 4 5 # 启动 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/libs
alert-server/libs
master-server/libs
worker-server/libs
6.4.2 修改配置
修改 bin/env/dolphinscheduler_env.sh 设定下列环境变量,修改如下配置:
1 2 3 4 5 vim bin/env/dolphinscheduler_env.sh export DATABASE=mysqlexport SPRING_PROFILES_ACTIVE=jdbc:mysql://192.168.1.73:3306/ds1?useUnicode=true &characterEncoding=UTF-8&useSSL=false export SPRING_DATASOURCE_USERNAME=rootexport SPRING_DATASOURCE_PASSWORD=root123
修改 tools/conf/application.yaml中 MySQL 的相关配置
1 2 3 4 5 6 7 8 9 10 11 vim tools/conf/application.yaml --- 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 相关配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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 初始化数据库 1 2 3 4 5 6 7 8 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 并不会清空您数据库里的数据
1 2 bash ./bin/dolphinscheduler-daemon.sh start standalone-server
进入下面的页面说明已经安装成功
7. 伪集群部署 伪集群部署目的是在单台机器部署 DolphinScheduler 服务,该模式下 master、worker、api server 都在同一台机器上
如果你是新手,想要体验 DolphinScheduler 的功能,推荐使用 Standalone 方式体检。如果你想体验更完整的功能,或者更大的任务量,推荐使用 伪集群部署 。如果你是在生产中使用,推荐使用 集群部署 或者 kubernetes
7.1 准备工作
下载安装包
安装数据库:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),两者任选其一即可,如 MySQL 则需要 JDBC Driver 8.0.16
部署注册中心 ZooKeeper (3.4.6+, 不包含 3.4.6) ,下载地址
进程树分析
macOS安装 pstree
Fedora/Red/Hat/CentOS/Ubuntu/Debian 安装 psmisc
1 2 sudo yum install -y psmisc
注意: DolphinScheduler 本身不依赖 Hadoop、Hive、Spark,但如果你运行的任务需要依赖他们,就需要有对应的环境支持
7.2 配置用户免密执行权限 任务执行服务是以 sudo -u {linux-user} 切换不同 linux 用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。所以这里需配置用户的免密权限
创建部署用户,并且一定要配置 sudo 免密。以创建 dolphinscheduler 用户为例
1 2 3 4 5 6 7 8 9 10 11 12 useradd dolphinscheduler echo "dolphinscheduler" | passwd --stdin dolphinschedulersed -i '$adolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-3.1.4-bin
如果发现 /etc/sudoers 文件中有 “Defaults requiretty” 这行,也请注释掉
7.3 配置SSH免密登陆 配置单节点免密登录可实现无缝的自动化脚本执行,提高任务成功率,同时简化本地节点的管理和维护过程。
1 2 3 4 5 6 7 8 9 su dolphinscheduler ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
配置完成后,可以通过运行命令 ssh localhost 判断是否成功,如果不需要输入密码就能ssh登陆则证明成功
7.4 配置 zookeeper(单节点) 7.4.1 下载安装文件 zookeeper 下载地址:http://archive.apache.org/dist/zookeeper/
根据自己的需要下载对应版本,这里下载的版本是 3.5.6
7.4.2 解压安装包 1 2 3 4 5 6 7 8 9 10 11 [root@node1 ~]# cd /opt/ [root@node1 opt]# tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz [root@node1 opt]# ll 总用量 30452 -rw-r--r-- 1 root root 9230052 10月 16 08:35 apache-zookeeper-3.5.6-bin.tar.gz drwxr-xr-x 8 root root 4096 1月 30 11:34 zookeeper-3.5.6
7.4.3 创建所需文件夹 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@node1 opt]# cd zookeeper-3.5.6/ [root@node1 opt]# mkdir data [root@node1 opt]# mkdir logs [root@node1 zookeeper-3.5.6]# ll 总用量 48 drwxr-xr-x 2 1000 1000 4096 10月 9 04:14 bin drwxr-xr-x 2 1000 1000 4096 1月 29 22:24 conf drwxr-xr-x 3 root root 4096 1月 29 22:24 data drwxr-xr-x 5 1000 1000 4096 10月 9 04:15 docs drwxr-xr-x 2 root root 4096 1月 29 21:50 lib -rw-r--r-- 1 1000 1000 11358 10月 5 19:27 LICENSE.txt drwxr-xr-x 3 root root 4096 1月 29 22:12 logs -rw-r--r-- 1 1000 1000 432 10月 9 04:14 NOTICE.txt -rw-r--r-- 1 1000 1000 1560 10月 9 04:14 README.md -rw-r--r-- 1 1000 1000 1347 10月 5 19:27 README_packaging.txt
7.4.4 修改配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@node1 zookeeper-3.5.6]# cd conf [root@node1 conf]# ll 总用量 16 -rw-r--r-- 1 1000 1000 535 10月 5 19:27 configuration.xsl -rw-r--r-- 1 1000 1000 2712 10月 5 19:27 log4j.properties -rw-r--r-- 1 1000 1000 922 10月 9 04:14 zoo_sample.cfg [root@node1 conf]# cp zoo_sample.cfg zoo.cfg [root@node1 conf]# vim zoo.cfg 在配置文件中增加或修改一下内容 dataDir=/opt/zookeeper-3.5.6/data dataLogDir=/opt/zookeeper-3.5.6/logs clientPort=2181 server.0=node1:2888:3888
7.4.5 启动服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@node1 conf]# cd /opt/zookeeper-3.5.6/bin [root@node1 bin]# [root@node1 bin]# ll 总用量 56 -rwxr-xr-x 1 1000 1000 2067 10月 9 04:14 zkCleanup.sh -rwxr-xr-x 1 1000 1000 1621 10月 9 04:14 zkCli.sh -rwxr-xr-x 1 1000 1000 3690 10月 5 19:27 zkEnv.sh -rwxr-xr-x 1 1000 1000 4573 10月 9 04:14 zkServer-initialize.sh -rwxr-xr-x 1 1000 1000 9386 10月 9 04:14 zkServer.sh -rwxr-xr-x 1 1000 1000 1385 10月 5 19:27 zkTxnLogToolkit.sh [root@node1 bin]# zkServer.sh start ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.5.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@node1 bin]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.5.6/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: standalone [root@node1 bin]# zkServer.sh stop ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.5.6/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED
7.4.6 查看zookeeper进程 1 2 3 4 5 6 7 8 9 [root@node1 bin]# jps -l 7696 org.apache.zookeeper.server.quorum.QuorumPeerMain 8311 sun.tools.jps.Jps [root@node1 bin]# [root@node1 bin]# lsof -i:2181 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 7696 root 49u IPv4 1194504 0t0 TCP *:eforward (LISTEN)
如果没有lsof服务可以使用 yum install lsof 安装
7.4.7 启动客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@node1 bin]# zkCli.sh Connecting to localhost:2181 ... Welcome to ZooKeeper! JLine support is enabled ... WATCHER:: WatchedEvent state:SyncConnected type :None path:null [zk: localhost:2181(CONNECTED) 0] [zk: localhost:2181(CONNECTED) 0] quit WATCHER:: WatchedEvent state:Closed type :None path:null
1 2 3 4 5 6 7 8 9 10 11 [root@node1 bin]# zkCli.sh -server localhost:2181 Connecting to localhost:2181 ... Welcome to ZooKeeper! JLine support is enabled ... WATCHER:: WatchedEvent state:SyncConnected type :None path:null [zk: localhost:2181(CONNECTED) 0]
7.5 修改相关配置 完成基础环境的准备后,需要根据你的机器环境修改配置文件。配置文件可以在目录 bin/env 中找到,他们分别是 并命名为 install_env.sh 和 dolphinscheduler_env.sh。
7.5.1 修改 install_env.sh 文件 install_env.sh 描述了哪些机器将被安装 DolphinScheduler 以及每台机器对应安装哪些服务。您可以在路径 bin/env/install_env.sh 中找到此文件,配置详情如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 vim bin/env/install_env.sh # --------------------------------------------------------- # INSTALL MACHINE # --------------------------------------------------------- # 由于 master、worker 和 API 服务器部署在单个节点上,因此服务器的 IP 为机器 IP 或本地主机(localhost) ips="localhost" sshPort="22" masters="localhost" workers="localhost:default" alertServer="localhost" apiServers="localhost" # DolphinScheduler 安装路径,如果不存在将自动创建。 installPath=/opt/dolphinscheduler # 部署用户,需要配置了免密执行权限和免密登录 deployUser="dolphinscheduler"
7.5.2 修改 dolphinscheduler_env.sh 文件 ./bin/env/dolphinscheduler_env.sh 描述了下列配置:
DolphinScheduler 的数据库配置,详细配置方法见初始化数据库
一些任务类型外部依赖路径或库文件,如 JAVA_HOME 和 SPARK_HOME都是在这里定义的
注册中心zookeeper
服务端相关配置,比如缓存,时区设置等
如果您不使用某些任务类型,您可以忽略任务外部依赖项,但您必须根据您的环境更改 JAVA_HOME、注册中心和数据库相关配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 vim ./bin/env/dolphinscheduler_env.sh export JAVA_HOME=/usr/java/jdk1.8.0_181export DATABASE=mysqlexport SPRING_PROFILES_ACTIVE=${DATABASE} export SPRING_DATASOURCE_URL=jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true &characterEncoding=UTF-8&useSSL=false export SPRING_DATASOURCE_USERNAME=rootexport SPRING_DATASOURCE_PASSWORD=root@123export REGISTRY_TYPE=zookeeperexport REGISTRY_ZOOKEEPER_CONNECT_STRING=192.168.1.73:2181
7.5.3 修改一些 application.yaml 配置文件
tools 模块配置文件, 在进行数据库初始化时会用到
1 2 3 4 5 6 7 8 9 10 11 vim tools/conf/application.yaml --- spring: config: activate: on-profile: mysql datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true &characterEncoding=UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 vim alert-server/conf/application.yaml --- spring: config: activate: on-profile: mysql datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true &characterEncoding=UTF-8&useSSL=false username: root password: root@123
1 2 3 4 5 6 7 8 9 10 11 vim api-server/conf/application.yaml --- spring: config: activate: on-profile: mysql datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true &characterEncoding=UTF-8&useSSL=false username: root password: root@123
1 2 3 4 5 6 7 8 9 10 11 12 vim master-server/conf/application.yaml --- spring: config: activate: on-profile: mysql datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true &characterEncoding=UTF-8&useSSL=false username: root password: root@123
1 2 3 4 5 6 7 8 9 10 11 12 13 vim worker-server/conf/application.yaml --- spring: config: activate: on-profile: mysql datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true &characterEncoding=UTF-8&useSSL=false username: root password: root@123
初始化数据库 在初始化数据库之前 需要创建好数据库, 这里配置的是 ds2
初始化数据库之前需要把驱动包拷贝到对应的模块 libs 目录下
1 2 3 4 5 6 cp mysql-connector-java-8.0.16.jar alert-server/libs/cp mysql-connector-java-8.0.16.jar api-server/libs/cp mysql-connector-java-8.0.16.jar master-server/libs/cp mysql-connector-java-8.0.16.jar standalone-server/libs/cp mysql-connector-java-8.0.16.jar tools/libs/cp mysql-connector-java-8.0.16.jar worker-server/libs/
1 2 3 4 5 6 bash tools/bin/upgrade-schema.sh ... 2023-03-28 08:34:42.575 INFO 11235 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : DolphinScheduler - Shutdown initiated... 2023-03-28 08:34:42.580 INFO 11235 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : DolphinScheduler - Shutdown completed.
部署 DolphinScheduler 使用上面创建的部署用户 运行以下命令完成部署,部署后的运行日志将存放在 logs 文件夹内
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # 使用 dolphinscheduler 用户进行安装 bash ./bin/install.sh 1.create directory 2.scp resources localhost:default scp dirs to localhost//opt/dolphinscheduler_single_cluster starting start to scp bin to localhost//opt/dolphinscheduler_single_cluster ...... ...... localhost Begin status master-server...... master-server [ RUNNING ] End status master-server. localhost Begin status worker-server...... worker-server [ RUNNING ] End status worker-server. localhost Begin status alert-server...... alert-server [ RUNNING ] End status alert-server. localhost Begin status api-server...... api-server [ RUNNING ] End status api-server. # 查看进程 [dolphinscheduler@node2 dolphinscheduler_single_cluster_install_package]$ jps -l 31429 sun.tools.jps.Jps 20886 org.apache.dolphinscheduler.alert.AlertServer 31129 org.apache.dolphinscheduler.server.worker.WorkerServer 31177 org.apache.dolphinscheduler.alert.AlertServer 31082 org.apache.dolphinscheduler.server.master.MasterServer 31226 org.apache.dolphinscheduler.api.ApiApplicationServer
*注意:* 第一次部署的话,可能出现 5 次sh: bin/dolphinscheduler-daemon.sh: No such file or directory相关信息,此为非重要信息直接忽略即可
1 2 3 4 tail -200f alert-server/logs/dolphinscheduler-alert.logtail -200f api-server/logs/dolphinscheduler-api.logtail -200f master-server/logs/dolphinscheduler-master.logtail -200f worker-server/logs/dolphinscheduler-worker.log
登录 DolphinScheduler 浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 即可登录系统UI。默认的用户名和密码是 admin/dolphinscheduler123
启停服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # 一键停止集群所有服务 bash ./bin/stop-all.sh # 一键开启集群所有服务 bash ./bin/start-all.sh # 启动 Master bash ./bin/dolphinscheduler-daemon.sh start master-server # 停止 master bash ./bin/dolphinscheduler-daemon.sh stop master-server # 查看 master 状态 bash ./bin/dolphinscheduler-daemon.sh status master-server # 启停 Worker bash ./bin/dolphinscheduler-daemon.sh start worker-server bash ./bin/dolphinscheduler-daemon.sh stop worker-server bash ./bin/dolphinscheduler-daemon.sh status worker-server # 启停 Api bash ./bin/dolphinscheduler-daemon.sh start api-server bash ./bin/dolphinscheduler-daemon.sh stop api-server bash ./bin/dolphinscheduler-daemon.sh status api-server # 启停 Alert bash ./bin/dolphinscheduler-daemon.sh start alert-server bash ./bin/dolphinscheduler-daemon.sh stop alert-server bash ./bin/dolphinscheduler-daemon.sh status alert-server
*注意1:* : 每个服务在路径 <service>/conf/dolphinscheduler_env.sh 中都有 dolphinscheduler_env.sh 文件,这是可以为微 服务需求提供便利。意味着您可以基于不同的环境变量来启动各个服务,只需要在对应服务中配置 <service>/conf/dolphinscheduler_env.sh 然后通过 <service>/bin/start.sh 命令启动即可。但是如果您使用命令 /bin/dolphinscheduler-daemon.sh start <service> 启动服务器,它将会用文件 bin/env/dolphinscheduler_env.sh 覆盖 <service>/conf/dolphinscheduler_env.sh 然后启动服务,目的是为了减少用户修改配置的成本.
*注意2:* :服务用途请具体参见《系统架构设计》小节。Python gateway service 默认与 api-server 一起启动,如果您不想启动 Python gateway service 请通过更改 api-server 配置文件 api-server/conf/application.yaml 中的 python-gateway.enabled : false 来禁用它。
集群部署 集群部署(Cluster)使用的脚本和配置文件与 伪集群部署 中的配置一样,所以所需要的步骤也与伪集群部署大致一样。下面的部署文档中省略了大部分章节, 仅介绍了集群部署过程中与伪分布式部署配置上有差异的部分。
区别就是伪集群部署针对的是一台机器,而集群部署(Cluster)需要针对多台机器,且两者 “ 修改相关配置 ” 步骤区别较大
集群规划
节点
服务
192.168.1.72
MasterServer, WorkerServer, ApiServer, AlertServer
192.168.1.71
WorkerServer
安装 JDK 前面介绍过了, 这里略过。
安装 psmisc 1 2 3 sudo yum install -y psmisc
配置用户免密执行权限 所有节点都需要配置, 详细内容见 伪集群部署中的 配置用户免密执行权限 章节
配置SSH免密登陆 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 su dolphinscheduler ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keysssh-copy-id ip
配置 zookeeper 根据需求,zookeeper 配置集群或者单节点均可, 详细配置见上述章节
修改相关配置 修改 install_env.sh 除了上述的部分还有一些有区别的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 vim bin/env/install_env.sh ips="192.168.1.72,192.168.1.71" sshPort="22" masters="localhost" workers="192.168.1.72:default,192.168.1.71:default" alertServer="192.168.1.72:default" apiServers="192.168.1.72:default" installPath=/opt/dolphinscheduler deployUser="dolphinscheduler"
修改 dolphinscheduler_env.sh 详细见伪集群安装部分的 修改 dolphinscheduler_env.sh 配置章节
修改一些 application.yaml 配置文件 详细见伪集群安装部分的 修改一些 application.yaml 配置章节
初始化数据库 详细见伪集群安装部分的 初始化数据库 配置章节
部署 DolphinScheduler 详细见伪集群安装部分的 部署 DolphinScheduler 配置章节
登录 DolphinScheduler 详细见伪集群安装部分的 登录 DolphinScheduler 配置章节
启停服务 详细见伪集群安装部分的 启停服务 配置章节