- 本文档部署了最新的 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/libs
alert-server/libs
master-server/libs
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.
6.5 启动 standalone-server
此时你已经连接上mysql,重启 或 停止 standalone-server 并不会清空您数据库里的数据
# 启动 Standalone Server 服务
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
进程树分析
- macOS安装
pstree
- Fedora/Red/Hat/CentOS/Ubuntu/Debian 安装
psmisc
# 如果是集群模式,每个节点都需要安装 sudo yum install -y psmisc
- macOS安装
注意: DolphinScheduler 本身不依赖 Hadoop、Hive、Spark,但如果你运行的任务需要依赖他们,就需要有对应的环境支持
7.2 配置用户免密执行权限
任务执行服务是以 sudo -u {linux-user}
切换不同 linux 用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。所以这里需配置用户的免密权限
创建部署用户,并且一定要配置 sudo
免密。以创建 dolphinscheduler 用户为例
# 创建用户需使用 root 登录
useradd dolphinscheduler
# 为 dolphinscheduler 用户设置密码,密码为 “dolphinscheduler”
echo "dolphinscheduler" | passwd --stdin dolphinscheduler
# 配置 sudo 免密
sed -i '$adolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers
# 修改目录权限,使得dolphinscheduler用户对 apache-dolphinscheduler-3.1.4-bin 目录有操作权限
chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-3.1.4-bin
- 如果发现
/etc/sudoers
文件中有 “Defaults requiretty” 这行,也请注释掉
7.3 配置SSH免密登陆
配置单节点免密登录可实现无缝的自动化脚本执行,提高任务成功率,同时简化本地节点的管理和维护过程。
# 切换用户
su dolphinscheduler
# 使用RSA 算法生成一对密钥 ,密码为 '' 即没有密码
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 实现免密登录
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 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 解压安装包
# 将下载的安装包上传到服务器
# 切换文件夹
[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 创建所需文件夹
# 切换文件夹
[root@node1 opt]# cd zookeeper-3.5.6/
# 创建数据文件夹(Zookeeper之后产生的数据会存储在该文件夹中)
[root@node1 opt]# mkdir data
# 创建日志文件夹(Zookeeper之后产生的日志数据会存储在该文件夹中)
[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 修改配置文件
# 切换文件夹
[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
# 修改配置文件名称,默认是使用zoo.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
# the port at which the clients will connect
clientPort=2181
#2888,3888 are election port
server.0=node1:2888:3888
7.4.5 启动服务
[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 # zookeeper 客户端
-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 # zookeeper 服务器相关命令
-rwxr-xr-x 1 1000 1000 1385 10月 5 19:27 zkTxnLogToolkit.sh
#启动zookeeper服务,restart 重启
[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
#查看zookeeper服务状态
[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 # 单节点模式
#停止zookeeper服务
[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进程
# 查看Java进程
[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 启动客户端
- 连接本机
[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
- 连接远程zookeeper服务
[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
中找到此文件,配置详情如下。
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
、注册中心和数据库相关配置。
vim ./bin/env/dolphinscheduler_env.sh
# JAVA_HOME, will use it to start DolphinScheduler server
export JAVA_HOME=/usr/java/jdk1.8.0_181
# 与数据库相关的配置,设置数据库类型、用户名和密码
export DATABASE=mysql
export 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=root
export SPRING_DATASOURCE_PASSWORD=root@123
# Registry center configuration, determines the type and link of the registry center
export REGISTRY_TYPE=zookeeper
export REGISTRY_ZOOKEEPER_CONNECT_STRING=192.168.1.73:2181
7.5.3 修改一些 application.yaml
配置文件
- tools 模块配置文件, 在进行数据库初始化时会用到
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/ds2?useUnicode=true&characterEncoding=UTF-8
- alert-server 模块
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
- api-server 模块
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
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
- worker-server 模块
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 目录下
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/
- 初始化数据库
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 文件夹内
# 使用 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
相关信息,此为非重要信息直接忽略即可
- 查看日志
tail -200f alert-server/logs/dolphinscheduler-alert.log
tail -200f api-server/logs/dolphinscheduler-api.log
tail -200f master-server/logs/dolphinscheduler-master.log
tail -200f worker-server/logs/dolphinscheduler-worker.log
登录 DolphinScheduler
浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 即可登录系统UI。默认的用户名和密码是 admin/dolphinscheduler123
启停服务
# 一键停止集群所有服务
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
# 在所有节点执行
sudo yum install -y psmisc
配置用户免密执行权限
所有节点都需要配置, 详细内容见 伪集群部署中的 配置用户免密执行权限
章节
配置SSH免密登陆
# 切换用户
su dolphinscheduler
# 使用RSA 算法生成一对密钥 ,密码为 '' 即没有密码
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 实现免密登录
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 免密登录到其他节点
ssh-copy-id ip
# ip 为想要登录的节点
配置 zookeeper
根据需求,zookeeper 配置集群或者单节点均可, 详细配置见上述章节
修改相关配置
修改 install_env.sh
除了上述的部分还有一些有区别的配置如下:
vim bin/env/install_env.sh
# 修改如下配置
# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# 由于 master、worker 和 API 服务器部署在单个节点上,因此服务器的 IP 为机器 IP 或本地主机(localhost)
ips="192.168.1.72,192.168.1.71"
sshPort="22"
masters="localhost"
# worker组就是多个 worker 组成了一个组,创建任务时 可以指定任务分片到哪些worker中执行
workers="192.168.1.72:default,192.168.1.71:default"
alertServer="192.168.1.72:default"
apiServers="192.168.1.72:default"
# DolphinScheduler 安装路径,如果不存在将自动创建。需要写当前用户有权限的路径
installPath=/opt/dolphinscheduler
# 部署用户,需要配置了免密执行权限和免密登录,将来作为启动dolphinScheduler的用户
deployUser="dolphinscheduler"
修改 dolphinscheduler_env.sh
详细见伪集群安装部分的 修改 dolphinscheduler_env.sh
配置章节
修改一些 application.yaml
配置文件
详细见伪集群安装部分的 修改一些 application.yaml
配置章节
初始化数据库
详细见伪集群安装部分的 初始化数据库 配置章节
部署 DolphinScheduler
详细见伪集群安装部分的 部署 DolphinScheduler 配置章节
登录 DolphinScheduler
详细见伪集群安装部分的 登录 DolphinScheduler 配置章节
启停服务
详细见伪集群安装部分的 启停服务 配置章节