DolphinScheduler 部署文档


  • 本文档部署了最新的 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 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 目录下,其中包括

  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

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

系统主页

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
    # 如果是集群模式,每个节点都需要安装
    sudo yum install -y psmisc

注意: 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.shdolphinscheduler_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_HOMESPARK_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 配置章节

启停服务

详细见伪集群安装部分的 启停服务 配置章节


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
对 kafka 中的消息进行 Avro 序列化 对 kafka 中的消息进行 Avro 序列化
1. Avro 介绍Avro 是一种数据序列化系统,由 Apache Foundation 开发并维护。它提供了丰富的数据结构类型,并且可以用于编码结构化数据。Avro 主要被用于 Apache Hadoop 这样的大数据处理系统中,它可以
2023-07-02
下一篇 
使用 assembly 对 SpringBoot 代码打包 使用 assembly 对 SpringBoot 代码打包
1. 背景最近向服务器上部署 spring boot项目时,会遇到一个问题,那就是 spring boot 打包时,会将自己写的代码和项目的所有依赖文件打成一个可执行的 jar 包。通常我们的项目都是运行在服务器上的,当项目更新时,每次都要
2023-03-17
  目录