开源任务调度平台(Apache DolphinScheduler)——功能介绍——参数
官方文档 : 「链接」
版本 : Version 3.1.7
任务中可能出现参数的地方
任务中可能出现的参数选项,任务不同参数也不同
任务参数 | 描述 |
任务名称 | 任务的名称,同一个工作流定义中的节点名称不能重复。 |
运行标志 | 标识这个节点是否需要调度执行,如果不需要执行,可以打开禁止执行开关。 |
描述 | 当前节点的功能描述。 |
任务优先级 | worker线程数不足时,根据优先级从高到低依次执行任务,优先级一样时根据先到先得原则执行。 |
Worker分组 | 设置分组后,任务会被分配给worker组的机器机执行。若选择Default,则会随机选择一个worker执行。 |
任务组名称 | 任务资源组,未配置则不生效。 |
组内优先级 | 一个任务组内此任务的优先级。 |
环境名称 | 配置任务执行的环境。 |
失败重试次数 | 任务失败重新提交的次数,可以在下拉菜单中选择或者手动填充。 |
失败重试间隔 | 任务失败重新提交任务的时间间隔,可以在下拉菜单中选择或者手动填充。 |
CPU 配额 | 为执行的任务分配指定的CPU时间配额,单位为百分比,默认-1代表不限制,例如1个核心的CPU满载是100%,16个核心的是1600%。 task.resource.limit.state |
最大内存 | 为执行的任务分配指定的内存大小,超过会触发OOM被Kill同时不会进行自动重试,单位MB,默认-1代表不限制。该功能由 task.resource.limit.state 控制。 |
超时告警 | 设置超时告警、超时失败。当任务超过"超时时长"后,会发送告警邮件并且任务执行失败。该功能由 task.resource.limit.state 控制。 |
资源 | 任务执行时所需资源文件。 |
前置任务 | 设置当前任务的前置(上游)任务。 |
延时执行时间 | 任务延迟执行的时间,以分为单位。 |
参数分类
- 内置参数
1.1.基础内置参数
变量名 | 声明方式 | 含义 |
system.biz.date | ${system.biz.date} | 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd |
system.biz.curdate | ${system.biz.curdate} | 日常调度实例定时的定时时间,格式为 yyyyMMdd |
system.datetime | ${system.datetime} | 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss |
验证: 通过shell 组件输出内置参数结果
创建一个shell,输入内容为内置参数变量,输出为变量对应的结果
查看日志可以发现内置参数结果可以被正常输出
1.2. 衍生内置参数(目前没找到使用指定日期进行加减的方法,演示默认使用的是系统时间.)
- 支持代码中自定义变量名,声明方式:${变量名}。可以是引用 "系统参数"
- 我们定义这种基准变量为 $[...] 格式的,$[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)]
验证: 通过shell 组件输出衍生内置参数结果
创建一个shell,输入内容为衍生内置参数变量,输出为变量对应的结果(add_months()函数的第一个参数是日期的格式不是具体的日期值.)
查看日志可以发现衍生内置参数结果可以被正常输出
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]
验证: 通过shell 组件输出衍生内置参数结果
查看日志可以发现衍生内置参数结果可以被正常输出
全局参数(注:这里定义的 qjcs 参数可以被其它任一节点的局部参数引用。)
- 作用域
全局参数是指针对整个工作流的所有任务节点都有效的参数,在工作流定义页面配置。
- 使用方式
具体的使用方式可结合实际的生产情况而定,这里演示为使用 Shell 任务打印出前一天的日期。
- 创建 Shell 任务
1. 创建一个 Shell 任务,并在脚本内容中输入 echo ${qjcs}。此时 qjcs 则为我们需要声明的全局参数。如下图所示:
2. 保存工作流,并设置全局参数
全局参数配置方式如下:在工作流定义页面,点击“设置全局”右边的加号,填写对应的变量名称和对应的值,保存即可。如下图所示:
3. 点击查看变量可以发现我们设置的参数
4. 任务实例查看执行结果
进入任务实例页面,可以通过查看日志,验证任务的执行结果,判断参数是否有效。
本地参数
- 作用域
在任务定义页面配置的参数,默认作用域仅限该任务,如果配置了参数传递则可将该参数作用到下游任务中。
- 使用方式
本地参数配置方式如下:在任务定义页面,点击“自定义参数”右边的加号,填写对应的变量名称和对应的值,保存即可。
如果要在单个任务中使用参数,请参阅通过自定义参数使用
如果要在任务中使用配置参数并在下游任务中使用它们:
如果你只是想要简单使用,且不使用自定义参数, 请参阅 通过 setValue 和自定义参数 export 本地参数;
如果想要使用自定义参数, 请参阅 通过 setValue 和自定义参数 export 本地参数;
如果想要使用 Bash 参数, 请参阅 通过 setValue 和 Bash 环境变量参数 export 本地参数;
注:本地参数可以在当前任务节点的工作流中,设置其为 OUT 则可以传递给下游的工作流使用,可以参考:参数传递
- 任务样例
3.1 通过自定义参数使用
本样例展示了如何使用本地参数,打印输出当前日期。创建一个 Shell 任务,并编写脚本内容为 echo ${bdcs}。点击配置栏中的自定义参数,配置如下图所示:
参数说明:
bdcs:参数名
IN:IN 表示局部参数仅能在当前节点使用,
OUT: 表示局部参数可以向下游传递
DATE:数据类型,日期
$[yyyy-MM-dd]:自定义格式的衍生内置参数
保存工作流并运行,查看 Shell 任务输出日志。
3.2. 通过setValue export 本地参数(使用 '${setValue(set_val="通过setValue export 本地参数")}' 或者 '#{setValue(set_val="通过setValue export 本地参数")}' 设置,下游都可以通过echo '${set_val}' 获取对应的值)
如果你想简单 export 参数然后在下游任务中使用它们,你可以在你的任务中使用 setValue,你可以将参数统一在一个任务中管理。在 Shell 任务中使用语法 echo '${setValue(set_val="通过setValue export 本地参数")}'(不要忘记单引号) 并添加新的 OUT 自定义参数来 export 它。
注意:
set_val : 只是起了一个名字,可以随意指定,保证在自定义参数中的名字一致就行;
在下游任务中使用语法 echo '${set_val}' 在获取设定的值。
3.3. 通过setValue和自定义参数 export 本地参数(只有使用 '#{setValue(set_val="通过setValue export 本地参数")}' 设置,下游才可以通过echo '${set_val}' 获取对应的值)
如果你想用自定义参数而不是常量值来实现参数 export,并下游任务中使用它们,你可以在通过 setValue 和 自定义参数实现,当你想改变参数的值时可以直接改变 “自定义参数”模块中的值,这让程序更加容易维护。您可以在 Shell 任务中使用语法 echo "#{setValue(set_val_param1=${val})}"(如果你想要将任何 变量赋值给 setValue 请不要忘记使用双引号)并添加新的 IN 自定义参数用于输入变量 val 和 OUT 自定义参数用于 export 参数 set_val_param1。
在下游任务中使用语法 echo '${set_val_param1}' 在获取设定的值。
3.4.通过setValue和 Bash 环境变量参数 export 本地参数
如果你想用 bash 变量而不是常量值 export 参数,并在下游任务中使用它们,你可以在通过 setValue 和 Bash 变量实现,它更灵活,例如你动态获取现有的本地 或 HTTP 资源获取设定变量。 您可以使用类似的语法
在下游任务中使用语法 echo '${set_val_var}' 在获取设定的值。
3.5.同一个任务中,在自定义参数中既添加了非常量参数,又添加了自定义in/out常数参数时,out设置的常量值无法传递到下游.
解决方法:
将常数与非常数的定义分开,在下游任务中均可调用常数参数了
示例 :
输出结果