如下图所示,部署 DolphinScheduler 机器的 hostname 为 ds1,ds2,ds3,ds4,ds5,其中 ds1,ds2 安装 master 服务,ds3,ds4,ds5安装 worker 服务,alert server安装在ds4中,api server 安装在ds5中
ips=“ds1,ds2,ds3,ds4,ds5”
masters=“ds1,ds2”
workers=“ds3:default,ds4:default,ds5:default”
alertServer=“ds4”
apiServers=“ds5”
启动 DolphinScheduler && 登录 DolphinScheduler && 启停服务
**与伪集群部署保持一致**
## 功能介绍
### 首页
首页包含用户所有项目的任务状态统计、流程状态统计、工作流定义统计。
![img](https://img-blog.csdnimg.cn/img_convert/dd1392afae072d0278bc2b0179543628.png)
### 项目管理
### 创建项目
点击"项目管理"进入项目管理页面,点击“创建项目”按钮,输入项目名称,项目描述,点击“提交”,创建新的项目。
![img](https://img-blog.csdnimg.cn/img_convert/fef37a3e822441cef174ec012859925a.png)
### 项目首页
在项目管理页面点击项目名称链接,进入项目首页,如下图所示,项目首页包含该项目的任务状态统计、流程状态统计、工作流定义统计。这几个指标的说明如下
* **任务状态统计**:在指定时间范围内,统计任务实例中状态为提交成功、正在运行、准备暂停、暂停、准备停止、停止、失败、成功、需要容错、kill、等待线程的个数
* **流程状态统计**:在指定时间范围内,统计工作流实例中状态为提交成功、正在运行、准备暂停、暂停、准备停止、停止、失败、成功、需要容错、kill、等待线程的个数
* **工作流定义统计**:统计用户创建的工作流定义及管理员授予该用户的工作流定义
![img](https://img-blog.csdnimg.cn/img_convert/22550fce9119c43a45904fe73779884d.png)
### 任务类型
#### Shell节点
shell节点,在worker执行的时候,会生成一个临时shell脚本,使用租户同名的linux用户执行这个脚本。
* 点击项目管理-项目名称-工作流定义,点击"创建工作流"按钮,进入DAG编辑页面。
* 工具栏中拖动[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-04KjxJw7-1683205953746)(https://dolphinscheduler.apache.org/img/shell.png)]到画板中,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SAkHpS8X-1683205953749)(https://dolphinscheduler.apache.org/img/shell\_dag.png)]
* 节点名称:一个工作流定义中的节点名称是唯一的。
* 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
* 描述信息:描述该节点的功能。
* 任务优先级:worker线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。
* Worker分组:任务分配给worker组的机器机执行,选择Default,会随机选择一台worker机执行。
* 失败重试次数:任务失败重新提交的次数,支持下拉和手填。
* 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填。
* 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.
* 脚本:用户开发的SHELL程序。
* 资源:是指脚本中需要调用的资源文件列表,资源中心-文件管理上传或创建的文件。
* 自定义参数:是SHELL局部的用户自定义参数,会替换脚本中以${变量}的内容。
#### 子流程节点
* 子流程节点,就是把外部的某个工作流定义当做一个任务节点去执行。
>
> 拖动工具栏中的![PNG](https://img-blog.csdnimg.cn/img_convert/5c75713b16eeeddbe23e72a096245d55.png)任务节点到画板中,如下图所示:
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/5bafb4c024d2c63c330a324633e40219.png)
* 节点名称:一个工作流定义中的节点名称是唯一的
* 运行标志:标识这个节点是否能正常调度
* 描述信息:描述该节点的功能
* 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.
* 子节点:是选择子流程的工作流定义,右上角进入该子节点可以跳转到所选子流程的工作流定义
#### 依赖节点
* 依赖节点,就是**依赖检查节点**。比如A流程依赖昨天的B流程执行成功,依赖节点会去检查B流程在昨天是否有执行成功的实例。
>
> 拖动工具栏中的![PNG](https://img-blog.csdnimg.cn/img_convert/872008a2012df82163b95a54f961eefd.png)任务节点到画板中,如下图所示:
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/d99cfa26d334a65d9dfb06a02bd0bbfe.png)
>
> 依赖节点提供了逻辑判断功能,比如检查昨天的B流程是否成功,或者C流程是否执行成功。
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/dc62e62e1816f4be01b4791dcdbca424.png)
>
> 例如,A流程为周报任务,B、C流程为天任务,A任务需要B、C任务在上周的每一天都执行成功,如图示:
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/17dde7eb44f86c44865fa520d0d590fc.png)
>
> 假如,周报A同时还需要自身在上周二执行成功:
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/dbcd713bfcf352789680b9a6e7ddbb7c.png)
#### 存储过程节点
* 根据选择的数据源,执行存储过程。
>
> 拖动工具栏中的![PNG](https://img-blog.csdnimg.cn/img_convert/edf6d9cdda31458c944319ac5cc11b33.png)任务节点到画板中,如下图所示:
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/593833ad328ff174f20677a2410e1c52.png)
* 数据源:存储过程的数据源类型支持MySQL和POSTGRESQL两种,选择对应的数据源
* 方法:是存储过程的方法名称
* 自定义参数:存储过程的自定义参数类型支持IN、OUT两种,数据类型支持VARCHAR、INTEGER、LONG、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP、BOOLEAN九种数据类型
#### SQL节点
* 拖动工具栏中的![PNG](https://img-blog.csdnimg.cn/img_convert/22a30e2a039da4b62b26acc1d2cf30d7.png)任务节点到画板中
* 非查询SQL功能:编辑非查询SQL任务信息,sql类型选择非查询,如下图所示:
![img](https://img-blog.csdnimg.cn/img_convert/81522239973038067bf5008ed10c7381.png)
* 查询SQL功能:编辑查询SQL任务信息,sql类型选择查询,选择表格或附件形式发送邮件到指定的收件人,如下图所示。
![img](https://img-blog.csdnimg.cn/img_convert/ed1c5c3639222a79db2f30faae7c40fe.png)
* 数据源:选择对应的数据源
* sql类型:支持查询和非查询两种,查询是select类型的查询,是有结果集返回的,可以指定邮件通知为表格、附件或表格附件三种模板。非查询是没有结果集返回的,是针对update、delete、insert三种类型的操作。
* sql参数:输入参数格式为key1=value1;key2=value2…
* sql语句:SQL语句
* UDF函数:对于HIVE类型的数据源,可以引用资源中心中创建的UDF函数,其他类型的数据源暂不支持UDF函数。
* 自定义参数:SQL任务类型,而存储过程是自定义参数顺序的给方法设置值自定义参数类型和数据类型同存储过程任务类型一样。区别在于SQL任务类型自定义参数会替换sql语句中${变量}。
* 前置sql:前置sql在sql语句之前执行。
* 后置sql:后置sql在sql语句之后执行。
#### SPARK节点
* 通过SPARK节点,可以直接直接执行SPARK程序,对于spark节点,worker会使用`spark-submit`方式提交任务
>
> 拖动工具栏中的![PNG](https://img-blog.csdnimg.cn/img_convert/90c0746960a952a6424566631b1de474.png)任务节点到画板中,如下图所示:
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/595cc92e3276bdf2acc45d6e2d9dc05d.png)
* 程序类型:支持JAVA、Scala和Python三种语言
* 主函数的class:是Spark程序的入口Main Class的全路径
* 主jar包:是Spark的jar包
* 部署方式:支持yarn-cluster、yarn-client和local三种模式
* Driver内核数:可以设置Driver内核数及内存数
* Executor数量:可以设置Executor数量、Executor内存数和Executor内核数
* 命令行参数:是设置Spark程序的输入参数,支持自定义参数变量的替换。
* 其他参数:支持 --jars、–files、–archives、–conf格式
* 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
* 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容
注意:JAVA和Scala只是用来标识,没有区别,如果是Python开发的Spark则没有主函数的class,其他都是一样
#### MapReduce(MR)节点
* 使用MR节点,可以直接执行MR程序。对于mr节点,worker会使用`hadoop jar`方式提交任务
>
> 拖动工具栏中的![PNG](https://img-blog.csdnimg.cn/img_convert/027059eee0f03bf1de06c7d99dbefa87.png)任务节点到画板中,如下图所示:
>
>
>
##### JAVA程序
![img](https://img-blog.csdnimg.cn/img_convert/9d4869c93e086920b7601d5c0143c12c.png)
* 主函数的class:是MR程序的入口Main Class的全路径
* 程序类型:选择JAVA语言
* 主jar包:是MR的jar包
* 命令行参数:是设置MR程序的输入参数,支持自定义参数变量的替换
* 其他参数:支持 –D、-files、-libjars、-archives格式
* 资源: 如果其他参数中引用了资源文件,需要在资源中选择指定
* 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容
##### Python程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p1oexZeW-1683205971444)(null)]
* 程序类型:选择Python语言
* 主jar包:是运行MR的Python jar包
* 其他参数:支持 –D、-mapper、-reducer、-input -output格式,这里可以设置用户自定义参数的输入,比如:
* -mapper “[mapper.py]( ) 1” -file [mapper.py]( ) -reducer [reducer.py]( ) -file [reducer.py]( ) –input /journey/words.txt -output /journey/out/mr/${currentTimeMillis}
* 其中 -mapper 后的 [mapper.py]( ) 1是两个参数,[第一个参数是mapper.py]( ),第二个参数是1
* 资源: 如果其他参数中引用了资源文件,需要在资源中选择指定
* 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容
#### Python节点
* 使用python节点,可以直接执行python脚本,对于python节点,worker会使用`python **`方式提交任务。
>
> 拖动工具栏中的![PNG](https://img-blog.csdnimg.cn/img_convert/08dee46026b3e34c5353d2fc765434eb.png)任务节点到画板中,如下图所示:
>
>
>
![img](https://img-blog.csdnimg.cn/img_convert/dce69d1aec048d01c8d9569581b0c31a.png)
* 脚本:用户开发的Python程序
* 环境名称:执行Python程序的解释器路径,指定运行脚本的解释器。当你需要使用 Python **虚拟环境** 时,可以通过创建不同的环境名称来实现。
* 资源:是指脚本中需要调用的资源文件列表
* 自定义参数:是Python局部的用户自定义参数,会替换脚本中以${变量}的内容
* 注意:若引入资源目录树下的python文件,需添加 `__init__.py` 文件
#### Flink节点
* 拖动工具栏中的![img](https://img-blog.csdnimg.cn/img_convert/de3e9645893ed243411875a5c6232f31.png)任务节点到画板中,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D8Zut6Pc-1683205976158)(null)]
* 程序类型:支持JAVA、Scala和Python三种语言
* 主函数的class:是Flink程序的入口Main Class的全路径
* 主jar包:是Flink的jar包
* 部署方式:支持cluster、local三种模式
* slot数量:可以设置slot数
* taskManage数量:可以设置taskManage数
* jobManager内存数:可以设置jobManager内存数
* taskManager内存数:可以设置taskManager内存数
* 命令行参数:是设置Spark程序的输入参数,支持自定义参数变量的替换。
* 其他参数:支持 --jars、–files、–archives、–conf格式
* 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
* 自定义参数:是Flink局部的用户自定义参数,会替换脚本中以${变量}的内容
注意:JAVA和Scala只是用来标识,没有区别,如果是Python开发的Flink则没有主函数的class,其他都是一样
#### http节点
* 拖动工具栏中的![img](https://img-blog.csdnimg.cn/img_convert/39ff7c8a40e4a76c7de5115cc040ac67.png)任务节点到画板中,如下图所示:
![img](https://img-blog.csdnimg.cn/img_convert/8de0bc5a0d33e8161bec883f4eb37a1e.png)
* 节点名称:一个工作流定义中的节点名称是唯一的。
* 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
* 描述信息:描述该节点的功能。
* 任务优先级:worker线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。
* Worker分组:任务分配给worker组的机器机执行,选择Default,会随机选择一台worker机执行。
* 失败重试次数:任务失败重新提交的次数,支持下拉和手填。
* 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填。
* 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.
* 请求地址:http请求URL。
* 请求类型:支持GET、POSt、HEAD、PUT、DELETE。
* 请求参数:支持Parameter、Body、Headers。
* 校验条件:支持默认响应码、自定义响应码、内容包含、内容不包含。
* 校验内容:当校验条件选择自定义响应码、内容包含、内容不包含时,需填写校验内容。
* 自定义参数:是http局部的用户自定义参数,会替换脚本中以${变量}的内容。
#### DATAX节点
* 拖动工具栏中的![img](https://img-blog.csdnimg.cn/img_convert/df2f2b5ed285f0813ce4f240a1e2d6a3.png)任务节点到画板中
![img](https://img-blog.csdnimg.cn/img_convert/5293d693649d998af9278d4f3f0d9b21.png)
* 自定义模板:打开自定义模板开关时,可以自定义datax节点的json配置文件内容(适用于控件配置不满足需求时)
* 数据源:选择抽取数据的数据源
* sql语句:目标库抽取数据的sql语句,节点执行时自动解析sql查询列名,映射为目标表同步列名,源表和目标表列名不一致时,可以通过列别名(as)转换
* 目标库:选择数据同步的目标库
* 目标表:数据同步的目标表名
* 前置sql:前置sql在sql语句之前执行(目标库执行)。
* 后置sql:后置sql在sql语句之后执行(目标库执行)。
* json:datax同步的json配置文件
* 自定义参数:SQL任务类型,而存储过程是自定义参数顺序的给方法设置值自定义参数类型和数据类型同存储过程任务类型一样。区别在于SQL任务类型自定义参数会替换sql语句中${变量}。
### 参数
#### 内置参数
##### 基础内置参数
| 变量名 | 声明方式 | 含义 |
| --- | --- | --- |
| system.biz.date | ${system.biz.date} | 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd,补数据时,该日期 +1 |
| system.biz.curdate | ${system.biz.curdate} | 日常调度实例定时的定时时间,格式为 yyyyMMdd,补数据时,该日期 +1 |
| system.datetime | ${system.datetime} | 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss,补数据时,该日期 +1 |
##### 衍生内置参数
* 支持代码中自定义变量名,声明方式:${变量名}。可以是引用 “系统参数”
* 我们定义这种基准变量为
[
.
.
.
]
格式的,
[...] 格式的,
[...]格式的,[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等
* 也可以通过以下两种方式:
1.使用add\_months()函数,该函数用于加减月份, 第一个入口参数为[yyyyMMdd],表示返回时间的格式 第二个入口参数为月份偏移量,表示加减多少个月
+ 后 N 年:$[add\_months(yyyyMMdd,12\*N)]
+ 前 N 年:$[add\_months(yyyyMMdd,-12\*N)]
+ 后 N 月:$[add\_months(yyyyMMdd,N)]
+ 前 N 月:$[add\_months(yyyyMMdd,-N)]
---
2.直接加减数字 在自定义格式后直接“+/-”数字
+ 后 N 周:$[yyyyMMdd+7\*N]
+ 前 N 周:$[yyyyMMdd-7\*N]
+ 后 N 天:$[yyyyMMdd+N]
+ 前 N 天:$[yyyyMMdd-N]
+ 后 N 小时:$[HHmmss+N/24]
+ 前 N 小时:$[HHmmss-N/24]
+ 后 N 分钟:$[HHmmss+N/24/60]
+ 前 N 分钟:$[HHmmss-N/24/60]
#### 全局参数
##### 作用域
在工作流定义页面配置的参数,作用于该工作流中全部的任务
##### 使用方式
全局参数配置方式如下:在工作流定义页面,点击“设置全局”右边的加号,填写对应的变量名称和对应的值,保存即可
![img](https://img-blog.csdnimg.cn/img_convert/48e91579bb4cdff35b93fa61e05a3e5d.png)
![img](https://img-blog.csdnimg.cn/img_convert/fe03d79023b0b5ae7b59886309b3388b.png)
这里定义的global\_bizdate参数可以被其它任一节点的局部参数引用,并设置global\_bizdate的value为通过引用系统参数system.biz.date获得的值
### 本地参数
##### 作用域
在任务定义页面配置的参数,默认作用域仅限该任务,如果配置了[参数传递]( )则可将该参数作用到下游任务中。
##### 使用方式
本地参数配置方式如下:在任务定义页面,点击“自定义参数”右边的加号,填写对应的变量名称和对应的值,保存即可
![img](https://img-blog.csdnimg.cn/img_convert/69fc7bd55b7de6e8361bd285c2b90722.png)
![img](https://img-blog.csdnimg.cn/img_convert/9764d000beb546d84fbd2d6784f98a61.png)
如果想要在本地参数中调用系统内置参数,将内置参数对应的值填到`value`中,如上图中的`${biz_date}`以及`${curdate}`
### 参数的引用
DolphinScheduler 提供参数间相互引用的能力,包括:本地参数引用全局参数、上下游参数传递。因为有引用的存在,就涉及当参数名相同时,参数的优先级问题,详见[参数优先级]( )
#### 本地任务引用全局参数
本地任务引用全局参数的前提是,你已经定义了[全局参数]( ),使用方式和[本地参数]( )中的使用方式类似,但是参数的值需要配置成全局参数中的key
![parameter-call-global-in-local](https://img-blog.csdnimg.cn/img_convert/9764d000beb546d84fbd2d6784f98a61.png)
如上图中的`${biz_date}`以及`${curdate}`,就是本地参数引用全局参数的例子。观察上图的最后一行,local\_param\_bizdate通过
g
l
o
b
a
l
b
i
z
d
a
t
e
来引用全局参数,在
s
h
e
l
l
脚本中可以通过
{global\_bizdate}来引用全局参数,在shell脚本中可以通过
globalbizdate来引用全局参数,在shell脚本中可以通过{local\_param\_bizdate}来引全局变量 global\_bizdate的值,或通过JDBC直接将local\_param\_bizdate的值set进去。同理,local\_param通过{local\_param}引用上一节中定义的全局参数。biz\_date、biz\_curdate、system.datetime都是用户自定义的参数,通过{全局参数}进行赋值。
#### 上游任务传递给下游任务
DolphinScheduler 允许在任务间进行参数传递,目前传递方向仅支持上游单向传递给下游。目前支持这个特性的任务类型有:
* [Shell]( )
* [SQL]( )
* [Procedure]( )
当定义上游节点时,如果有需要将该节点的结果传递给有依赖关系的下游节点,需要在【当前节点设置】的【自定义参数】设置一个方向是 OUT 的变量。目前我们主要针对 SQL 和 SHELL 节点做了可以向下传递参数的功能。
##### SQL
prop 为用户指定;方向选择为 OUT,只有当方向为 OUT 时才会被定义为变量输出;数据类型可以根据需要选择不同数据结构;value 部分不需要填写。
如果 SQL 节点的结果只有一行,一个或多个字段,prop 的名字需要和字段名称一致。数据类型可选择为除 LIST 以外的其他类型。变量会选择 SQL 查询结果中的列名中与该变量名称相同的列对应的值。
如果 SQL 节点的结果为多行,一个或多个字段,prop 的名字需要和字段名称一致。数据类型选择为LIST。获取到 SQL 查询结果后会将对应列转化为 LIST,并将该结果转化为 JSON 后作为对应变量的值。
我们再以上图中包含 SQL 节点的流程举例说明:
上图中节点【createParam1】的定义如下:
![image-20210723104957031](https://img-blog.csdnimg.cn/img_convert/639a65a8f32f8c2a03278acc9415c09e.png)
节点【createParam2】的定义如下:
![image-20210723105026924](https://img-blog.csdnimg.cn/img_convert/d0bd423b32c88a65ed5affd1f58dc771.png)
您可以在【工作流实例】页面,找到对应的节点实例,便可以查看该变量的值。
节点实例【createParam1】如下:
![image-20210723105131381](https://img-blog.csdnimg.cn/img_convert/216aaf9d9849b0a59977ddec1c8470ec.png)
这里当然 “id” 的值会等于 12.
我们再来看节点实例【createParam2】的情况。
![image-20210723105255850](https://img-blog.csdnimg.cn/img_convert/d5778b4344edeb052153f7c8776b0b61.png)
这里只有 “id” 的值。尽管用户定义的 sql 查到的是 “id” 和 “database\_name” 两个字段,但是由于只定义了一个为 out 的变量 “id”,所以只会设置一个变量。由于显示的原因,这里已经替您查好了该 list 的长度为 10。
##### Shell
prop 为用户指定;方向选择为 OUT,只有当方向为 OUT 时才会被定义为变量输出;数据类型可以根据需要选择不同数据结构;value 部分不需要填写。
用户需要传递参数,在定义 shell 脚本时,需要输出格式为 ${setValue(key=value)} 的语句,key 为对应参数的 prop,value 为该参数的值。
例如下图中, 通过 `echo '${setValue(trans=hello trans)}'`, 将’trans’设置为"hello trans", 在下游任务中就可以使用trans这个变量了:
![trans-shell](https://img-blog.csdnimg.cn/img_convert/b0fa3884be57ca179d7cf7580ef82830.png)
shell 节点定义时当日志检测到 ${setValue(key=value1)} 的格式时,会将 value1 赋值给 key,下游节点便可以直接使用变量 key 的值。同样,您可以在【工作流实例】页面,找到对应的节点实例,便可以查看该变量的值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6pUPPoeR-1683205971021)(null)]
### 参数优先级
DolphinScheduler 中所涉及的参数值的定义可能来自三种类型:
* [全局参数]( ):在工作流保存页面定义时定义的变量
* [上游任务传递的参数]( ):上游任务传递过来的参数
* [本地参数]( ):节点的自有变量,用户在“自定义参数”定义的变量,并且用户可以在工作流定义时定义该部分变量的值
因为参数的值存在多个来源,当参数名相同时,就需要会存在参数优先级的问题。DolphinScheduler 参数的优先级从高到低为:`全局参数 > 上游任务传递的参数 > 本地参数`
在上游任务传递的参数的情况下,由于上游可能存在多个任务向下游传递参数。当上游传递的参数名称相同时:
* 下游节点会优先使用值为非空的参数
* 如果存在多个值为非空的参