安全中心(Security)
队列管理(Queue manage)
队列是在执行 spark、mapreduce 等程序,需要用到“队列”参数时使用的(创建后不可删除)。
例:
安全中心 -> 队列管理 -> 创建队列
------------------------------------------------------
名称:quene_test
队列值:quene_test
------------------------------------------------------
提交
租户管理(Tenant Manage)
租户对应的是 Linux 的用户,用于 worker 提交作业所使用的用户。
如果 Linux 没有这个用户,worker 会在执行脚本的时候创建这个用户。
租户编码:租户编码是 Linux 上的用户,唯一,不能重复。
新建的租户会在 HDFS 上 $hdfsPath("/dolphinscheduler") 目录下创建租户目录,租户目录下为该租户上传的文件和 UDF 函数
租户名称:租户编码的别名
例:
安全中心 -> 租户管理 -> 创建租户
------------------------------------------------------
租户编码:test
租户名称:test
队列值:default
------------------------------------------------------
提交
使用到HDFS需要为该用户在 HDFS 上创建用户目录
sudo -u hdfs hadoop fs -mkdir /user/developer
sudo -u hdfs hadoop fs -chown developer:developer /user/developer
用户管理(User Manage)
用户分为管理员用户和普通用户。
授予权限包括:项目权限,资源权限,数据源权限,UDF函数权限。
管理员可以对普通用户进行非其创建的项目、资源、数据源和UDF函数进行授权。
例:
安全中心 -> 用户管理 -> 创建用户
------------------------------------------------------
用户名称:test
密码:test123
租户:test
队列:default
邮箱:****
手机号:
-----------------------------------------------------+-
提交
实际生产环境中,可将 项目、用户、租户 相关联,即为某个大的项目创建一个用户及对应的租户。若需要删除用户,则应首先将项目内的任务删除,然后删除项目,再删除用户及关联的租户,否则会出现任务无法运行,项目不可见等情况(1.2 版本)
如果该 用户切换租户,则该 用户在当前租户下创建的所有资源 将 复制 到新的租户下(对于 HDFS 平台来说,则是将当前租户目录下该用户创建的所有资源复制到新租户的目录下,不复制被赋权的文件,且被赋权的文件仍有权限)。需要注意的是,此后进行文件删除操作时,旧租户下的对应的文件并不会被删除。
告警组管理(Warning group manage)
告警组是在启动时设置的参数,在流程结束以后会将流程的状态和其他信息以邮件形式发送给告警组。
Worker分组管理(Worker group manage)
worker 分组,提供了一种让任务在指定的 worker 上运行的机制。
管理员创建 worker 分组,在任务节点和运行参数中设置中可以指定该任务运行的 worker 分组。
如果指定的分组被删除或者没有指定分组,则该任务会在任意一个 worker 上运行。worker 分组内多个 ip 地址(不能写别名),以英文逗号分隔。
例:
安全中心 -> Worker分组管理 -> 创建Worker分组
------------------------------------------------------
组名称:worker_group1
IP:*****
------------------------------------------------------
提交
令牌管理(Token manage)
由于后端接口有登录检查,令牌管理,提供了一种可以通过调用接口的方式对系统进行各种操作。
监控中心(Monitor)
略
数据源中心(Datasource)
数据源中心 -> 创建数据源 -> MYSQL
------------------------------------------------------
数据源名称:mysql_source
描述:
IP主机名:*****
端口:3306
用户名:root
密码:*****
数据库名:test
jdbc连接参数:{"useSSL":"false","useUnicode":"true","characterEncoding":"UTF-8","allowMultiQueries":"true"}
------------------------------------------------------
测试链接 -> 编辑
其他数据源:略,后续用到再补充
资源中心(Resources)
资源中心所有文件对应的 Mysql 表为:t_ds_resources
UDF 对应的 Mysql 表为:t_ds_udfs
资源中心的文件上传、删除操作使用的用户均为 install.sh 中指定的 $hdfsRootUser
由于没有使用HDFS,略,后续用到再补充
项目管理(Project)
创建项目
项目名称 不可重复。即使为不同用户,创建项目时若 项目名称 已存在。会提示 “project Test already exists”。
若要删除项目,需要确认项目中所有 工作流定义 都已下线并删除,才能进行删除操作。
实际生产环境中,建议使用 管理员账户 创建项目,并对开发人员赋权。
例:
项目管理 -> 创建项目
------------------------------------------------------
项目名称:测试项目
描述:
------------------------------------------------------
提交
项目首页
项目名称 -> 项目首页
------------------------------------------------------
任务状态统计:是指在指定时间范围内,统计 任务实例 中的待运行、失败、运行中、完成、成功的个数
流程状态统计:是指在指定时间范围内,统计 工作流实例 中的待运行、失败、运行中、完成、成功的个数
流程定义统计:是统计当前用户有权限的项目的 工作流定义 总数
工作流定义的工作流每运行一次,产生一个工作流实例,一个工作流实例包含一到多个任务实例。同一任务实例仅被统计一次,按最近时间状态进行统计。
工作流定义
创建工作流定义
项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
Step 1:拖拽“SHELL"节点到画布,新增一个Shell任务。
------------------------------------------------------
节点名称:task01
描述:This is a test task.
任务优先级:MEDIUM
Worker分组:Default
失败重试次数:0
失败重试间隔:1
脚本:
#!/bin/sh
echo "HELLO WORLD."
资源:
自定义参数:
------------------------------------------------------
确认添加
Step 2:拖拽“SHELL"节点到画布,新增一个Shell任务。
------------------------------------------------------
节点名称:task02
描述:This is another test task.
任务优先级:MEDIUM
Worker分组:Default
失败重试次数:0
失败重试间隔:1
脚本:
#!/bin/sh
echo "HELLO DOLPHIN SCHEDULER."
资源:
自定义参数:
-> 确认添加
------------------------------------------------------
Step 3:“选择线条连接”,连接任务1、2,tesk01、task02 会串行执行。
Step 4:保存
------------------------------------------------------
设置DAG图名称:Test_shell
选择租户:test
------------------------------------------------------
-> 添加
更多任务类型详见:
工作流定义操作功能
工作流定义列表的操作功能如下:
- 编辑: 只能编辑"下线"的工作流定义。工作流DAG编辑同创建工作流定义。
- 上线: 工作流状态为"下线"时,上线工作流,只有"上线"状态的工作流能运行,但不能编辑。
- 下线: 工作流状态为"上线"时,下线工作流,下线状态的工作流可以编辑,但不能运行。
- 运行: 只有上线的工作流能运行。运行操作步骤见 5.5.3.3 运行工作流
- 定时: 只有上线的工作流能设置定时,系统自动定时调度工作流运行。创建定时后的状态为"下线",需在定时管理页面上线定时才生效。定时操作步骤见 5.5.3.4 工作流定时。
- 定时管理: 定时管理页面可编辑、上线/下线、删除定时。
- 删除: 删除工作流定义。
- 下载: 下载工作流定义到本地
- 树形图: 以树形结构展示任务节点的类型及任务状态
运行工作流
工作流运行参数说明:
- 失败策略:当某一个任务节点执行失败时,其他并行的任务节点需要执行的策略。”继续“表示:某一任务失败后,其他任务节点正常执行;”结束“表示:终止所有正在执行的任务,并终止整个流程。
- 通知策略:当流程结束,根据流程状态发送流程执行信息通知邮件,包含任何状态都不发,成功发,失败发,成功或失败都发。
- 流程优先级:流程运行的优先级,分五个等级:最高(HIGHEST),高(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。当master线程数不足时,级别高的流程在执行队列中会优先执行,相同优先级的流程按照先进先出的顺序执行。
- worker分组:该流程只能在指定的worker机器组里执行。默认是Default,可以在任一worker上执行。
- 通知组:选择通知策略||超时报警||发生容错时,会发送流程信息或邮件到通知组里的所有成员。
- 收件人:选择通知策略||超时报警||发生容错时,会发送流程信息或告警邮件到收件人列表。
- 抄送人:选择通知策略||超时报警||发生容错时,会抄送流程信息或告警邮件到抄送人列表。
- 补数:包括串行补数、并行补数2种模式。串行补数:指定时间范围内,从开始日期至结束日期依次执行补数,只生成一条流程实例;并行补数:指定时间范围内,多天同时进行补数,生成N条流程实例。
例:
项目管理 -> 工作流 -> 工作流定义 -> 选择工作流名称“Test_shell” -> 上线 -> 运行(参数均为默认,不做修改)
工作流定时
选择指定工作流,点击“定时”,选择起止时间、定时等选择定时执行时间。
点击"创建"按钮,创建定时成功,此时定时状态为"下线",定时需上线才生效。
定时上线:点击"定时管理"按钮,进入定时管理页面,点击"上线"按钮,定时状态变为"上线",如下图所示,工作流定时生效。
下线 工作流定义 后,定时任务业务也会同时下线,工作流定义 上线后,需要重新手动上线定时任务
导入工作流
点击项目管理->工作流->工作流定义,进入工作流定义页面,点击"导入工作流"按钮,导入本地工作流文件,工作流定义列表显示导入的工作流,状态为下线。
工作流实例
工作流实例操作功能:
- 编辑:可以对已经终止的流程进行编辑,编辑后保存的时候,可以选择是否 更新到工作流定义
- 重跑:可以对已经终止的流程进行重新执行
- 恢复失败:针对失败的流程,可以执行恢复失败操作,从失败的节点开始执行
- 停止:对正在运行的流程进行停止操作,后台会先 kill worker 进程,再执行 kill -9 操作
- 暂停:可以对正在运行的流程进行暂停操作,系统状态变为等待执行,会等待正在执行的任务结束,暂停下一个要执行的任务
- 恢复暂停:可以对暂停的流程恢复,直接从暂停的节点开始运行
- 删除:删除工作流实例及工作流实例下的任务实例
- 甘特图:Gantt图纵轴是某个工作流实例下的任务实例的拓扑排序,横轴是任务实例的运行时间
查看工作流实例:
项目管理 -> 工作流 -> 工作流实例 -> 点击工作流名称 -> 进入DAG查看页面,查看任务执行状态
查看任务日志:
进入DAG查看页面 -> 双击任务节点 -> 查看日志
查看任务历史记录:
进入DAG查看页面 -> 双击任务节点 -> 查看历史
查看运行参数:
进入工作流DAG页面 -> 点击左上角图标,查看工作流实例的启动参数、全局参数和局部参数
任务实例
任务实例 -> 点击工作流实例名称 -> 可跳转到工作流实例DAG图查看任务状态
任务实例 -> 查看日志
任务节点类型和参数设置
Shell节点
运行说明:shell 节点,在 worker 执行的时候,会生成一个临时 shell 脚本,使用租户同名的linux 用户执行这个脚本。
参数说明:
- 节点名称:一个工作流定义中的节点名称是唯一的
- 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关
- 描述信息:描述该节点的功能
- 任务优先级:级别高的任务在执行队列中会优先执行,相同优先级的任务按照先进先出的顺序执行
- Worker分组:指定任务运行的机器列表
- 失败重试次数:任务失败重新提交的次数,支持下拉和手填
- 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填
- 超时告警:当任务执行时间超过超时时长可以告警并且超时失败
- 脚本:用户开发的SHELL程序
- 资源:是指脚本中需要调用的资源文件列表
- 自定义参数:是SHELL局部的用户自定义参数,会替换脚本中以${变量}的内容
例:
项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
拖拽“SHELL"节点到画布,新增一个Shell任务。
节点名称:Test_shell_01
运行标志:正常
描述:
任务优先级:MEDIUM
Worker分组:Default
失败重试次数:0
失败重试间隔:1
超时告警:off
脚本:
#!/bin/sh
for i in {1..10};do echo $i;done
资源:
自定义参数:
-> 确认添加
------------------------------------------------------
保存 ->
设置DAG图名称:Test_shell
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行
子流程节点
运行说明:子流程节点,就是把外部的某个工作流定义当做一个任务节点去执行。
参数说明:
- 节点名称:一个工作流定义中的节点名称是唯一的
- 运行标志:标识这个节点是否能正常调度
- 描述信息:描述该节点的功能
- 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败
- 子节点:是选择子流程的工作流定义,右上角进入该子节点可以跳转到所选子流程的工作流定义
例:
项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
Task 1:拖拽 SHELL 节点到画布,新增一个 Shell 任务
节点名称:Test_subprocess_01
... ...
脚本:
#!/bin/sh
for i in {1..10};do echo $i;done
-> 确认添加
Task 2:拖拽 SUB_PROCESS 节点到画布,新增一个 SUB_PROCESS 任务
节点名称:Test_subprocess_02
... ...
子节点:Test_shell
-> 确认添加
------------------------------------------------------
串联任务节点 Task1 和 Task2
------------------------------------------------------
保存 ->
设置DAG图名称:Test_subprocess
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行
存储过程节点
运行说明:根据选择的数据源,执行存储过程。
参数说明:
- 数据源:存储过程的数据源类型支持 MySQL、POSTGRESQL、CLICKHOUSE、ORACLE、SQLSERVER 等,选择对应的数据源
- 方法:是存储过程的方法名称
- 自定义参数:存储过程的自定义参数类型支持 IN、OUT 两种,数据类型支持 VARCHAR、INTEGER、LONG、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP、BOOLEAN 九种数据类型
SQL节点
参数说明:
- 数据源:选择对应的数据源
- sql类型:支持查询和非查询两种,查询是 select 类型的查询,是有结果集返回的,可以指定邮件通知为 表格、附件 或 表格与附件 三种模板。非查询是没有结果集返回的,是针对 update、delete、insert 三种类型的操作
- 主题、收件人、抄送人:邮件相关配置
- sql参数:输入参数格式为 key1=value1;key2=value2…
- sql语句:SQL语句
- UDF函数:对于HIVE类型的数据源,可以引用资源中心中创建的UDF函数,其他类型的数据源暂不支持UDF函数
- 自定义参数:SQL任务类型,而存储过程是自定义参数顺序的给方法设置值自定义参数类型和数据类型同存储过程任务类型一样。区别在于SQL任务类型自定义参数会替换sql语句中 ${变量}
- 前置sql:执行 “sql语句” 前的操作
- 后置sql:执行 “sql语句” 后的操作
例,以mysql为例:
项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
Task 1:拖拽 SQL 节点到画布,新增一个 SQL 任务
节点名称:Test_sql_mysql_01
... ...
数据源:MYSQL mysql_source
sql类型:查询 表格:√ 附件:√
主题:Test MySQL
收件人:******
sql语句:
select * from test_table where score=${i};
自定义参数:
i -> IN -> INTEGER -> 123
前置sql:
INSERT INTO test_table values(1, 'test',123)
后置sql:
-> 确认添加
Task 2:拖拽 SQL 节点到画布,新增一个 SQL 任务
节点名称:Test_sql_mysql_02
... ...
数据源:MYSQL mysql_source
sql类型:非查询
sql语句:
create table test_table2 as select * from test_table;
自定义参数:
前置sql:
后置sql:
-> 确认添加
------------------------------------------------------
串联任务节点 Test_sql_mysql_01、Test_sql_mysql_02
------------------------------------------------------
保存 ->
设置DAG图名称:Test_sql_mysql
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行
依赖(DEPENDENT)节点
运行说明:依赖节点,就是依赖检查节点。比如A流程依赖昨天的B流程执行成功,依赖节点会去检查B流程在昨天是否有执行成功的实例。
其他节点,略,后续使用到了其他节点会补充
参数
系统参数
变量 | 含义 |
---|---|
${system.biz.date} | 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd,补数据时,该日期 +1 |
${system.biz.curdate} | 日常调度实例定时的定时时间,格式为 yyyyMMdd,补数据时,该日期 +1 |
${system.datetime} | 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss,补数据时,该日期 +1 |
自定义参数
- 支持代码中自定义变量名,声明方式:${变量名}。可以是引用 "系统参数" 或指定 "常量"。
- 我们定义这种基准变量为 [...] 格式的,[yyyyMMddHHmmss] 是可以任意分解组合的,比如:[HHmmss], $[yyyy-MM-dd] 等
- 也可以使用以下格式:
* 后 N 年:$[add_months(yyyyMMdd,12*N)]
* 前 N 年:$[add_months(yyyyMMdd,-12*N)]
* 后 N 月:$[add_months(yyyyMMdd,N)]
* 前 N 月:$[add_months(yyyyMMdd,-N)]
* 后 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]
官方使用文档
https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/quick-start.html
出现的问题
创建租户
- 租户对应的是Linux的用户,用于worker提交作业所使用的用户。如果linux没有这个用户,worker会在执行脚本的时候创建这个用户。
- 租户编码:租户编码是Linux上的用户,唯一,不能重复
- 出现创建不了租户原因
- ds的启动用户没有创建用户的权限
- linux系统禁用了sudo,进入/etc/sudoers 将 Default requiretty注释掉
创建用户
- 权限划分,目的是为了更好的管理项目,资源,UDF,数据源等信息。
- 创建用户需要指定租户(要想admin用户有执行权限,需要给admin用户赋予租户)
调度未执行
定时任务上线成功,调度未执行,查看master没有打印错误日志
- 原因可能是quartz在启动时就报错了,导致quartz初始化没有成功。
- 修改master_logback.xml
<root level="INFO">
<appender-ref ref="MASTERLOGFILE"/>
<!-- 增加日志到控制台-->
<appender-ref ref="STDOUT"/>
</root>
- 查看master.out文件