dolphin_scheduler_case调度
调度案例
前置准备
创建yarn队列
⏰ 安全中心 > Yarn队列管理 > 创建队列 > 输入名称和队列值
- 队列名称: EBS_YARN_QUEUE
- 队列值: EBS_YARN_QUEUE
创建租户
多用户共享资源,即多租户
1
2
3
4
5
6
7
8
9
10
# 添加系统用户
useradd dolphinscheduler
# 所有权移交
chown -R dolphinscheduler:dolphinscheduler dolphinscheduler-2.0.8/
# 设置用户密码
passwd dolphinscheduler
# 切换至新用户
su dolphinscheduler
# 免密登录
ssh-copy-id dolphinscheduler@single如:hdfs, yarn, spark-on-yarn …
当 Worker 提交任务时,就用指定的租户身份提交
需要事先在对应的 Worker 节点上创建用户,或者通过修改 worker.properties 配置自动创建不存在用户, 但是需要启动 Worker 节点的用户具备免密功能
1
2
# 该项默认值为 false
worker.tenant.auto.create=true⏰ 安全中心 > 租户管理 > 创建租户 > 输入租户名和选择关联 yarn 队列名
- 租户名:dolphinscheduler
- 关联队列:ebs
创建用户
用户登录 dolphin scheduler 系统的用户
分类:
- 管理员:有授权和用户管理等权限,无创建项目和工作流定义权限。如:安全中心
- 普通用户:有创建项目和工作流定义的创建,编辑,执行等操作权限。
创建普通用户
- ⏰ 安全中心 > 用户管理 > 创建用户 > 输入账号、密码、租户、Yarn队列、邮箱、手机
- 👉 指定租户和队列:用户提交任务默认使用的租户与队列
- 用户名:henry
- 用户密码:henry123
- 默认租户:dolphinscheduler
- 默认队列:ebs
- 邮箱:12665473@qq.com
- 手机好吗:18014499655
创建邮箱告警实例
告警QQ邮箱设置
登录QQ邮箱
点击QQ邮箱头像 > 账号和安全 > 安全设置 > SMTP/IMAP 服务
- 开启服务
- 获取授权码:
- 微信扫码,自动发送
- 生成授权码 ihybzznbvnopbijb
⏰ 安全中心 > 告警实例管理 > 创建告警实例 > 输入告警实例名称并选择插件
插件可选:Ding Talk, Email, We chat 等
- 告警实例名称:ebs_alert_mail
- 插件名称:Email
- 收件人:12665473@qq.com
- 发件主机:smtp.qq.com
- 发件端口:
- 未加密:25
- 已加密(tls):587
- 已加密(ssl):465
- 发件人:12665473@qq.com
- 发件授权:Yes
- 账号:12665473
- 授权码:ihybzznbvnopbijb
- 开启超时(ttl):Yes
- 开启安全(ssl):Yes
创建告警组
告警实例与告警组用于任务运行成功或者失败之后的告警通知。
一个告警组可包含多个告警实例,一个告警实例,需选择一个告警插件,并配置相应参数。
目前支持的告警插件有电子邮件、钉钉、企业微信、飞书等。⏰ 安全中心 > 告警组管理 > 创建告警组 > 输入告警组名称并选择告警实例名
- 告警组名:ebs_warn_group
- 告警实例:ebs_alert_mail
创建工作组
一个 Worker 分组由多个 Worker 组成。
在任务执行时,可以将任务分配给指定 Worker组,由该组中的 Worker 节点执行该任务。
每个 Worker 至少属于一个组,默认为 default 组。Worker 所属分组可以调整,配置方式如下:
静态配置:worker. properties
1
2
# 节点对应的分组名称列表,多个分组名之间用英文逗号隔开
worker.groups=default,EBS动态配置:
- ⏰ 安全中心 > Worker分区管理 > 创建Worker分组 > 输入组名和组地址列表
- 名称: EBS_WORKER_GROUP
- Worker地址列表:192.168.83.128:1234
创建环境
配置 Worker 运行环境(任务运行时所需的环境变量)。
默认的运行环境由 Worker节点中 conf/env/dolphinscheduler_env.sh 决定。
1
2
3
4
5
6
7
8
export JAVA_HOME=/opt/software/jdk1.8.0_171
export HADOOP_HOME=/opt/software/hadoop-3.1.3
export HADOOP_CONF_DIR=/opt/software/hadoop-3.1.3/etc/hadoop
export YARN_CONF_DIR=/opt/software/hadoop-3.1.3/etc/hadoop
export HIVE_HOME=/opt/software/hive-3.1.2
export SPARK_HOME=/opt/software/spark-3.1.2
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin:$PATH
export HADOOP_CLASSPATH=/opt/software/hadoop-3.1.3/etc/hadoop:/opt/software/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/common/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn:/opt/software/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn/*创建特定环境
⏰ 安全中心 > 环境管理 > 创建环境 > 输入环境名称👇、环境配置、详细描述并选择Worker组
- 名称:ebs_env
- 环境配置:
1
2
3
4
5
6
7
8
export JAVA_HOME=/opt/software/jdk1.8.0_171
export HADOOP_HOME=/opt/software/hadoop-3.1.3
export HADOOP_CONF_DIR=/opt/software/hadoop-3.1.3/etc/hadoop
export YARN_CONF_DIR=/opt/software/hadoop-3.1.3/etc/hadoop
export HIVE_HOME=/opt/software/hive312
export SPARK_HOME=/opt/software/spark-3.1.2
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin:$PATH
export HADOOP_CLASSPATH=/opt/software/hadoop-3.1.3/etc/hadoop:/opt/software/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/common/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn:/opt/software/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn/*
1
2
3
4
5
6
7
8
9
export JAVA_HOME=/opt/software/jdk1.8.0_171
export HADOOP_HOME=/opt/software/hadoop-3.1.3
export HADOOP_CONF_DIR=/opt/software/hadoop-3.1.3/etc/hadoop
export YARN_CONF_DIR=/opt/software/hadoop-3.1.3/etc/hadoop
export HIVE_HOME=/opt/software/hive312
export SPARK_HOME2=/opt/software/spark-3.1.2
export HADOOP_CLASSPAHT=/opt/software/hadoop-3.1.3/etc/hadoop:/opt/software/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/common/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn:/opt/software/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn/*
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin:$PATH
- Worker 组:EBS
创建令牌
令牌用于通过接口访问 DolphinScheduler 各项服务时的用户验证。
普通用户通过 UI 页面访问各项服务时,无需使用令牌。
若需将 DolphinScheduler 与第三方服务进行集成,则需调用其接口。⏰ 安全中心 > 令牌管理 > 创建令牌 > 选择失效时间、关联用户、并生成令牌
- 失效时间:2024-7-31 23:59:59
- 关联用户:henry
- 生成令牌:bd2694540517ad916b0b203d28292b76
创建工作流
切换普通用户登录
项目管理 > 工作流 > 创建工作流 > 输入项目名称
- 项目名称:EBS
编辑工作流
点击项目名称进入项目管理界面
共包含三个模快,分别为工作流定义、工作流实例和任务实例。
工作流定义:用于定义工作流,包括工作流各节点任务详情及各节点依赖关系等。
工作流实例:工作流每执行一次就会生成一个工作流实例。
- 点击实例:可查看正在运行的工作流以及已经完成的工作流。
任务实例:工作流中的一个节点任务,每执行一次就会生成一个任务实例。
- 点击任务:可查看正在执行的节点任务以及已经完成的节点任务。
简单案例
节点公共配置项介绍
- 优先级:表示 Worker节点资源不足时优先执行哪个 Task节点。
- Worker分组和环境:若管理员编辑了Worker分组与环境,并将N个环境与Worker工作组关联,则选择对应的Worker分组,会自动更新可选的环境,做出相应的环境选择即可。
- 失败重试:若任务执行失败,可以在一定的时间间隔内重复执行多次
- 超时告警:若任务执行超时,则在最长 30 分钟(可修改)后,做出告警
- 资源:若当前任务执行需要相关的依赖资源,则选择,当然需要提前配置依赖资源,默认为空
- 资源主要为:java 或 scala 的各种 jar 包
- 将 jar 包提前上传至资源中心,就会出现在资源列表中
- 在资源列表中做出相应的选择即可
- 前置任务:若任务之间有依赖关系,则必选择其依赖的任务节点名称
编辑三个 SHELL 实例
A :
1
echo "hello world" > /root/scheduler/a.log
B :
1
echo "we are the champion" > /root/scheduler/b.log
C :
1
2
3
cat /root/scheduler/a.log > /root/scheduler/c.log
cat /root/scheduler/b.log >> /root/scheduler/c.log
wc /root/scheduler/c.log > /root/scheduler/d.log流程图 DAG
![]()
工作流保存为:ssh-test
初始化默认为 ”下线“ 状态,不可执行,需要在工作流列表中点击工作流之后的 “↑” 按钮上线。
点击工作流列表中 “▶” 按钮立即执行工作流,执行之后会产生实例和任务实例。
配置项功能介绍:
- 失败策略:DAG 图中某个任务执行失败,其他并行任务是否有执行的必要,二选一
- 告警组和通知策略互相关联:是否通知,由谁通知且通知谁
- 补数:是否补之前失败的任务,比如:T+1,今天发现前三天的任务执行失败了,选择补数,可以补上之前执行失败的任务。选择待补日期区间,有两种补的方式如下:
- 串行:如果数据之间存在依赖关系,按天执行。
- 并行:每两天之间的数据或结果之间无依赖关系,一起并行执行。
- 点击工作流实例名:Task ✔ 表示执行成功,Task ✖ 表示执行失败
- 点击任务实例之后操作项中的 人📄:查看任务日志
点击工作流列表中 “时⏱” 按钮设置工作流定期执行。
- 点击 “执行时间” :可以查看详细执行时间列表。
- 定时任务默认为下线状态:点击工作流详情之后的定时管理图标 📅 , 点击 “↑” 设置上线。
工作流传参
1、定义:给脚本传参
2、方式:三种传参方式
本地参数:单个任务节点有效的参数,设置单个任务是通过 “自定义参数” 添加。
参数类型:
in : 表示给当前节点的脚本传参 :名称, in, 类型, 值
静态常量值没有实际意义。
按内置参数传入:主要为日期
基础参数
1
2
3
4
# name parameter(参数) remark
system.biz.date ${system.biz.date} #定时前一天 yyyyMMdd
system.biz.curdate ${system.biz.curdate} #定时当天 yyyyMMdd
system.datetime ${system.datetime} #定时当天 yyyyMMddHHmmss衍生参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# parameter(参数) 使用格式
$[yyyy-MM-dd HH:mm:ss]
$[yyyy-MM-dd]
# parameter(参数) 使用函数
$[add_months(yyyy-MM-dd,12*N)] # 后N年
$[add_months(yyyy-MM-dd,-12*N)] # 前N年
$[add_months(yyyy-MM-dd,N)] # 后N月
$[add_months(yyyy-MM-dd,-N)] # 前N月
# parameter(参数) 直接±数值
$[yyyy-MM-dd+7*N] # 后N周
$[yyyy-MM-dd-7*N] # 前N周
$[yyyy-MM-dd+N] # 后N天
$[yyyy-MM-dd-N] # 前N天
$[HH:mm:ss+N/24] # 后N小时
$[HH:mm:ss-N/24] # 前N小时
$[HH:mm:ss+N/24/60] # 后N分钟
$[HH:mm:ss-N/24/60] # 前N分钟out : 表示给当前节点的下游节点传参:名称, out, 类型, 值
并非所有任务支持,只有:Shell, SQL, Procedure 支持
传递当前任务的动态执行结果:
1
2
3
4
5
# 动态传参语法:写在脚本中,配合分支给下游传同键不同值
echo '${setValue(key=value)}'
# 参数设置:名称, out, 类型, 空置
# 下游节点中:通过 ${key} 取值全局参数:
- 工作流编辑完成时,通过 “设置全局” 添加。
3、应用:
- 取值:脚本中通过 ${参数名} 提取参数值。
- 冲突一(优先级):当全局、局部、上游参数同名时,优先级为:本地 > 上游 > 全局。
- 冲突二:若多个上游同时给下游传同名参数,首先取非空值,多个非空值按时间取最先传入的值。
引用依赖资源
任务需要引用的外部资源
- MR、Spark 等任务须引用 jar 包
- Shell 任务需要引用其他脚本
“资源中心” 统一管理以上资源,资源存储方式如下。
- 本地文件系统
- hdfs
- Hive 自定义函数管理
工作流失败重启
工作流启动方式:
- 在工作流列表中:选择 ▶ 启动工作流
- 在工作流列表中:选择 ⏱ 定时自动工作流执行计划
- 若任务执行失败 ✖:可以选择在 “工作流实例” 中选择从失败节点开始执行
单机启动快速体验
启动服务
bin/dolphinscheduler-daemon.sh start standalone-server
修改工程配置:
yarn + client
工程打包:
package -> jar
创建资源并上传 jar:
henry_ebs/*.jar
主机与部署模式:
yarn + client