dolphinscheduler 官网地址 https://dolphinscheduler.apache.org/
dolphinscheduler GitHub地址 https://github.com/apache/dolphinscheduler
Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,不能直观监控任务健康状态等问题,使调度系统在数据处理流程中开箱即用;以DAG流式的方式将Task组装起来,可实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及Kill任务等操作。
高可靠性:去中心化的多Master和多Worker服务对等架构, 避免单Master压力过大,另外采用任务缓冲队列来避免过载。实现集群HA,通过Zookeeper实现Master集群和Worker集群去中心化。
简单易用:DAG监控界面,所有流程定义都是可视化,通过拖拽任务完成定制DAG,通过API方式与第三方系统集成, 一键部署。以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态。
丰富的使用场景:支持多租户,支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作。
高扩展性:支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线。
紧密贴合大数据生态,支持丰富的任务类型,提供Flink、Spark、 Hive, M/R、Python、Sub_process、SQL(mysql、postgresql、hive、sparksql)、Shell等近20种任务类型。
支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败。
支持工作流全局参数及节点自定义参数设置。
支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑。
支持任务日志在线查看及滚动、在线下载日志等。
支持对Master/Worker
cpu load,memory,cpu在线查看。
支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计。
支持补数。
支持国际化。
DAG: 全称 Directed Acyclic Graph,简称 DAG。工作流中的 Task 任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。
流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可视化DAG。
流程实例:流程实例是流程定义的实例化,可以通过手动启动或定时调度生成,流程定义每运行一次,产生一个流程实例。
任务实例:任务实例是流程定义中任务节点的实例化,标识着具体的任务执行状态。
任务类型:目前支持有 SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中子 SUB_PROCESS 也是一个单独的流程定义,是可以单独启动执行的。
调度方式:系统支持基于 cron 表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。 其中 恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用。
定时调度:系统采用 quartz 分布式调度器,并同时支持cron表达式可视化的生成。
依赖:系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖。
优先级 :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出。
邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知。
失败策略:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束。
补数:补历史数据,支持区间并行和串行两种补数方式。
dolphinscheduler-alert 告警模块,提供 AlertServer 服务。
dolphinscheduler-api web应用模块,提供 ApiServer 服务。
dolphinscheduler-common 通用的常量枚举、工具类、数据结构或者基类
dolphinscheduler-dao 提供数据库访问等操作。
dolphinscheduler-remote 基于 netty 的客户端、服务端
dolphinscheduler-server MasterServer 和 WorkerServer 服务
dolphinscheduler-service service模块,包含Quartz、Zookeeper、日志客户端访问服务,便于server模块和api模块调用
dolphinscheduler-ui 前端模块
Linux 操作系统版本要求:
操作系统
版本
Red Hat Enterprise Linux
7.0 及以上
CentOS
7.0 及以上
Oracle Enterprise Linux
7.0 及以上
Ubuntu LTS
16.04 及以上
服务器建议配置:DolphinScheduler 支持运行在 Intel x86-64 架构的 64 位通用硬件服务器平台。对生产环境的服务器硬件配置有以下建议:
CPU
内存
硬盘类型
网络
实例数量
4核+
8 GB+
SAS
千兆网卡
1+
注意:
- 以上建议配置为部署 DolphinScheduler 的最低配置,生产环境强烈推荐使用更高的配置
- 硬盘大小配置建议 50GB+ ,系统盘和数据盘分开
网络要求,DolphinScheduler正常运行提供如下的网络端口配置:
组件
默认端口
说明
MasterServer
5678
非通信端口,只需本机端口不冲突即可
WorkerServer
1234
非通信端口,只需本机端口不冲突即可
ApiApplicationServer
12345
提供后端通信端口
注意:
- MasterServer 和 WorkerServer 不需要开启网络间通信,只需本机端口不冲突即可
- 管理员可根据实际环境中 DolphinScheduler 组件部署方案,在网络侧和主机侧开放相关端口
客户端 Web 浏览器要求:DolphinScheduler 推荐 Chrome 以及使用 Chromium 内核的较新版本浏览器访问前端可视化操作界面
如果是简单体验 DolphinScheduler 的功能则使用Standalone方式接口,这里可以使用二进制也可以docker方式安装;如果想体验更完整的功能或者更大的任务量推荐使用伪集群部署,这里可以使用二进制也可以docker-compose方式安装;如果你是在生产中使用,推荐使用集群部署或者kubernetes;我们这里则选择更好理解其架构和组成的二进制集群部署方式。
# 下载最新版本3.0.0-beta-2,也可以选择2.0.6
wget https://dlcdn.apache.org/dolphinscheduler/3.0.0-beta-2/apache-dolphinscheduler-3.0.0-beta-2-bin.tar.gz
# 解压文件
tar -xvf apache-dolphinscheduler-3.0.0-beta-2-bin.tar.gz
准备三台服务器安装集群,ZooKeeper和MySQL 使用之前文章已部署好的,下面前置准备工作和准备启动环境都是在三台上都要执行
安装每一台服务器都准备下面的前置条件
JDK(1.8+)
数据库:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),两者任选其一即可,如 MySQL 则需要 JDBC Driver 8.0.16,我们这里选择 MySQL。
注册中心:ZooKeeper (3.4.6+)
进程树分析
pstree
psmisc
yum -y install psmisc注意: DolphinScheduler 本身不依赖 Hadoop、Hive、Spark,但如果你运行的任务需要依赖他们,就需要有对应的环境支持。
配置用户免密及权限:创建部署用户,并且一定要配置 sudo
免密。以创建 dolphinscheduler 用户为例:
useradd dolphinscheduler
echo "dolphinscheduler" | passwd --stdin dolphinscheduler
sed -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-*-bin
注意:因为任务执行服务是以
sudo -u {linux-user}
切换不同 linux 用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。初学习者不理解的话,完全可以暂时忽略这一点。如果发现/etc/sudoers
文件中有 "Defaults requirett" 这行,也请注释掉。
配置机器SSH免密登陆:由于安装的时候需要向不同机器发送资源,所以要求各台机器间能实现SSH免密登陆。配置免密登陆的步骤如下:
su dolphinscheduler
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub dolphinscheduler@192.168.5.53:/tmp/dolphinscheduler
scp ~/.ssh/id_rsa.pub dolphinscheduler@192.168.12.27:/tmp/dolphinscheduler
cat /tmp/dolphinscheduler/id_rsa.pub >> ~/.ssh/authorized_keys
注意: 配置完成后,可以通过运行命令
ssh localhost
判断是否成功,如果不需要输入密码就能ssh登陆则证明成功。
完成基础环境的准备后,需要根据你的机器环境修改配置文件。配置文件可以在目录 bin/env
中找到,他们分别是 并命名为 install_env.sh
和 dolphinscheduler_env.sh
。
install_env.sh修改内容如下:
ips=${ips:-"192.168.5.52,192.168.5.53,192.168.12.27"}
sshPort=${sshPort:-"22"}
masters=${masters:-"192.168.5.52,192.168.5.53"}
workers=${workers:-"192.168.5.52:default,192.168.5.53:default,192.168.12.27:default"}
alertServer=${alertServer:-"192.168.5.52"}
apiServers=${apiServers:-"192.168.5.53"}
installPath=${installPath:-"/tmp/dolphinscheduler"}
deployUser=${deployUser:-"dolphinscheduler"}
zkRoot=${zkRoot:-"/dolphinscheduler"}
dolphinscheduler_env.sh
JAVA_HOME
和 SPARK_HOME
都是在这里定义的。zookeeper
。DolphinScheduler 元数据存储在关系型数据库中,目前支持 PostgreSQL 和 MySQL,这里使用 MySQL 8.0.28则需要手动下载 mysql-connector-java 驱动(8.0.28) 并移动到 DolphinScheduler 的 lib目录下(tools/libs/
)。此外其他几个模块也都需要mysql-connector-java-8.0.28.jar
cp tools/libs/mysql-connector-java-8.0.28.jar master-server
cp tools/libs/mysql-connector-java-8.0.28.jar worker-server/libs/
cp tools/libs/mysql-connector-java-8.0.28.jar alert-server/libs/
cp tools/libs/mysql-connector-java-8.0.28.jar api-server/libs/
配置数据库和用户
mysql -uroot -p
mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 修改 {user} 和 {password} 为你希望的用户名和密码
mysql> CREATE USER 'dolphinscheduler'@'%' IDENTIFIED BY 'dolphinscheduler123';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%';
mysql> CREATE USER 'dolphinscheduler'@'localhost' IDENTIFIED BY 'dolphinscheduler123';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'localhost';
mysql> FLUSH PRIVILEGES;
然后修改./bin/env/dolphinscheduler_env.sh
,将username和password改成你在上一步中设置的用户名dolphinscheduler和密码dolphinscheduler123
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://192.168.50.95:3308/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true"
export SPRING_DATASOURCE_USERNAME=dolphinscheduler
export SPRING_DATASOURCE_PASSWORD=dolphinscheduler123
完成上述步骤后已为 DolphinScheduler 创建一个新数据库,现在可以通过快速的 Shell 脚本来初始化数据库
sh tools/bin/upgrade-schema.sh
执行后我们查看dolphinscheduler数据库,部分表如下
使用上面创建的部署用户dolphinscheduler运行以下命令完成部署,部署后的运行日志将存放在 logs 文件夹内
sh ./bin/install.sh
查看结果已经成功启动整个集群,每一台都运行配置模块部分
浏览器访问地址 http://192.168.5.53:12345/dolphinscheduler/ui 即可登录系统UI。webUi 在org.apache.dolphinscheduler.api.ApiApplicationServer部署的机器是哪个,默认的用户名和密码是 admin/dolphinscheduler123 ,登录后进入首页,首页包含用户所有项目的任务状态统计、流程状态统计、工作流定义统计。DolphinScheduler 支持两种类型的内置主题,包括 Dark
和 Light
。当您想改变主题时,只需单击顶部控制栏在 语言 左侧名为 Dark
(or Light
) 的按钮即可。项目首页包含该项目的任务状态统计、流程状态统计、工作流定义统计。这几个指标的说明如下
如果需要在某台服务器上启动所有配置的服务或者某个服务
# 一键停止集群所有服务
sh ./bin/stop-all.sh
# 一键开启集群所有服务
sh ./bin/start-all.sh
# 启停 Master
sh ./bin/dolphinscheduler-daemon.sh stop master-server
sh ./bin/dolphinscheduler-daemon.sh start master-server
# 启停 Worker
sh ./bin/dolphinscheduler-daemon.sh start worker-server
sh ./bin/dolphinscheduler-daemon.sh stop worker-server
# 启停 Api
sh ./bin/dolphinscheduler-daemon.sh start api-server
sh ./bin/dolphinscheduler-daemon.sh stop api-server
# 启停 Alert
sh ./bin/dolphinscheduler-daemon.sh start alert-server
sh ./bin/dolphinscheduler-daemon.sh stop alert-server
可以查看当前Master、Worker、DB的系统情况,包括CPU、内存和平均负载
安全中心只有管理员账户才有权限操作,分别有队列管理、租户管理、用户管理、告警组管理、worker分组管理、令牌管理等功能,在用户管理模块可以对资源、数据源、项目等授权。接下来先挑几个必要功能操作下
worker.properties
配置文件中参数 worker.tenant.auto.create=true
实现当 linux 用户不存在时自动创建该用户。worker.tenant.auto.create=true
参数会要求 worker 可以免密运行 sudo
命令用户分为管理员用户和普通用户
编辑用户信息
修改用户密码
每个 worker 节点都会归属于自己的 worker 分组,默认分组为 default。在任务执行时,可以将任务分配给指定 worker 分组,最终由该组中的 worker 节点执行该任务。
打开要设置分组的 worker 节点上的 conf/worker.properties
配置文件. 修改 worker.groups 参数.
worker.groups 参数后面对应的为该 worker 节点对应的分组名称,默认为 default。
也可以在运行中修改 worker 所属的 worker 分组,如果修改成功,worker 就会使用这个新建的分组,忽略 worker.properties
中的配置。
worker:
groups:
- default
- bigdatabase
默认有一个default组,三台Worker节点都在这个组里
新建一个大数据基础工作组,选择Worker,确定即可。
注销退出系统后用前面创建的普通用户testuser重新登录系统,切换到项目管理模块,点击“创建项目”按钮,输入项目名称,项目描述,点击“提交”,创建演示项目
本篇最后我们就以一个简单执行多个依赖的shell脚本的工作流来揭开使用的大门。
进入工作流定义页面,点击“创建工作流”按钮,进入工作流DAG编辑页面,工具栏中拖拽 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TVT7yVWw-1659111362070)(shell.png)] 到画板中,新增一个Shell任务,如下图所示
其余两个节点也相同创建方式,创建后通过拖拉编排任务的依赖关系,也可以选择任务节点后选择前置任务;配置任务之间的依赖关系: 点击任务节点的右侧加号连接任务;如下图所示,任务 shell-nodeA 和任务shell-nodeB 并行执行,当任务shell-nodeA和任务shell-nodeB执行完shell-nodeC会同时执行。如要删除依赖关系: 点击右上角"箭头"图标[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QUQtvl6n-1659111362085)(arrow.png)],选中连接线,点击右上角"删除"图标[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vIJI4yCV-1659111362088)(delete.png)],删除任务间的依赖关系。
保存工作流定义: 点击”保存“按钮,弹出"设置DAG图名称"弹框,如下图所示,输入工作流定义名称,工作流定义描述,设置全局参数(选填),点击"添加"按钮,工作流定义创建成功。
进入工作流定义页面,工作流定义列表的操作功能如下:
通过如下操作运行工作流,生成工作流示例
工作流示例可以点击重跑按钮
查看任务定义
查看任务示例,我们重跑了一次因此任务示例有6个
可以多次继续重跑,在任务实例列表操作按钮还可以查看日志和下载日志
**本人博客网站 **IT小神 www.itxiaoshen.com
手机扫一扫
移动阅读更方便
你可能感兴趣的文章