大数据|海豚调度官方文档注解(4)

官方文档地址:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.8

因为官方文档经常出现文档桑、图片加载缓慢、中文名对应关系较差,且存在部分链接异常的情况,所以我将其重新整理、排版以方便阅读。

同时做了部分优化,增加了一些注解,补充了中英文对应关系。

3.4 参数

3.4.1 内置参数

3.4.1.1 基础内置参数
变量名声明方式含义
system.biz.date${system.biz.date}日常调度实例定时的定时时间前一天,格式为 yyyyMMdd
system.biz.curdate${system.biz.curdate}日常调度实例定时的定时时间,格式为 yyyyMMdd
system.datetime${system.datetime}日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss
3.4.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)]

    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]

3.4.2 全局参数

3.4.2.1 作用域

全局参数是指针对 整个工作流 的所有任务节点都有效的参数,在工作流定义页面配置。

3.4.2.2 使用方式

具体的使用方式可结合实际的生产情况而定,这里演示为使用 Shell 任务打印出前一天的日期。

3.4.2.2.1 创建 Shell 任务

创建一个 Shell 任务,并在脚本内容中输入 echo ${dt}。此时 dt 则为我们需要声明的全局参数。如下图所示:

在这里插入图片描述

3.4.2.2.2 保存工作流,并设置全局参数

全局参数配置方式如下:在工作流定义页面,点击“设置全局”右边的加号,填写对应的变量名称和对应的值,保存即可。如下图所示:

在这里插入图片描述

注:这里定义的 dt 参数可以被其它任一节点的局部参数引用。

3.4.2.2.3 任务实例查看执行结果

进入任务实例页面,可以通过查看日志,验证任务的执行结果,判断参数是否有效。

在这里插入图片描述

3.4.3 本地参数

3.4.3.1 作用域

在任务定义页面配置的参数,默认作用域仅限该任务,如果配置了 3.3.4 - 参数传递 则可将该参数作用到下游任务中。

3.4.3.2 使用方式

本地参数配置方式如下:在任务定义页面,点击 “自定义参数” 右边的加号,填写对应的变量名称和对应的值,保存即可。

  • 如果要在单个任务中使用参数,请参阅通过自定义参数使用
  • 如果要在任务中使用配置参数并在下游任务中使用它们:
    • 如果你只是想要简单使用,且不使用自定义参数, 请参阅 通过 setValue 和自定义参数 export 本地参数
    • 如果想要使用自定义参数, 请参阅 通过 setValue 和自定义参数 export 本地参数
    • 如果想要使用 Bash 参数, 请参阅 通过 setValue 和 Bash 环境变量参数 export 本地参数
3.4.3.3 任务样例
3.4.3.3.1 通过自定义参数使用

本样例展示了如何使用本地参数,打印输出当前日期。创建一个 Shell 任务,并编写脚本内容为 echo ${dt}。点击配置栏中的自定义参数,配置如下图所示:
在这里插入图片描述

参数说明:

  • dt:参数名
  • IN:IN 表示局部参数仅能在当前节点使用,OUT 表示局部参数可以向下游传递
  • DATE:数据类型,日期
  • $[yyyy-MM-dd]:自定义格式的衍生内置参数

保存工作流并运行,查看 Shell 任务输出日志。

在这里插入图片描述

注:本地参数可以在当前任务节点的工作流中,设置其为 OUT 则可以传递给下游的工作流使用,可以参考:3.3.4 - 参数传递

3.4.3.3.2 通过 setValue export 本地参数

如果你想简单 export 参数然后在下游任务中使用它们,你可以在你的任务中使用 setValue,你可以将参数统一在一个任务中管理。在 Shell 任务中使用语法 echo '${setValue(set_val=123)}'(不要忘记单引号) 并添加新的 OUT 自定义参数来 export 它。

在这里插入图片描述

你可以在下游任务中使用语法 echo '${set_val}' 在获取设定的值。

3.4.3.3.3 通过 setValue 和自定义参数 export 本地参数

如果你想用自定义参数而不是常量值来实现参数 export,并下游任务中使用它们,你可以在通过 setValue 和 自定义参数实现,当你想改变参数的值时可以直接改变 “自定义参数”模块中的值,这让程序更加容易维护。您可以在 Shell 任务中使用语法 echo "#{setValue(set_val_param=${val})}"如果你想要将任何 变量赋值给 setValue 请不要忘记使用双引号)并添加新的 IN 自定义参数用于输入变量 valOUT 自定义参数用于 export 参数 set_val_param

在这里插入图片描述

你可以在下游任务中使用语法 echo '${set_val_param}' 在获取设定的值。

3.4.3.3.4 通过 setValue 和 Bash 环境变量参数 export 本地参数

如果你想用 bash 变量而不是常量值 export 参数,并在下游任务中使用它们,你可以在通过 setValue 和 Bash 变量实现,它更灵活,例如你动态获取现有的本地 或 HTTP 资源获取设定变量。 您可以使用类似的语法

lines_num=$(wget https://raw.githubusercontent.com/apache/dolphinscheduler/dev/README.md -q -O - | wc -l | xargs)
echo "#{setValue(set_val_var=${lines_num})}"

在 Shell 任务中(如果你想要将任何变量赋值给 setValue 请不要忘记使用双引号)和 OUT 自定义参数用于 export 参数 set_val_var

在这里插入图片描述

你可以在下游任务中使用语法 echo '${set_val_var}' 在获取设定的值。

3.4.4 参数传递(参数的引用)

DolphinScheduler 提供参数间相互引用的能力,包括:本地参数引用全局参数、上下游参数传递。因为有引用的存在,就涉及当参数名相同时,参数的优先级问题,详见 3.4.5 参数优先级

3.4.4.1 本地任务引用全局参数

本地任务引用全局参数的前提是,你已经定义了 3.4.2 全局参数,使用方式和 3.4.3 本地参数 中的使用方式类似,但是参数的值需要配置成全局参数中的 key。

3.4.4.2 上游任务传递给下游任务

DolphinScheduler 允许在任务间进行参数传递,目前传递方向仅支持上游单向传递给下游。目前支持这个特性的任务类型有:

当定义上游节点时,如果有需要将该节点的结果传递给有依赖关系的下游节点,需要在【当前节点设置】的【自定义参数】设置一个方向是 OUT 的变量。目前我们主要针对 SQL 和 SHELL 节点做了可以向下传递参数的功能。

上游传递的参数可以在下游节点中被更新,更新方法与设置参数相同。

如果定义了同名的传递参数,上游节点的参数将被覆盖。

注:若节点之间没有依赖关系,则局部参数无法通过上游传递。

3.4.4.3.1 任务样例

本样例展示了如何使用参数传递的功能,通过 SHELL 任务来创建本地参数并赋值传递给下游,SQL 任务通过获得上游任务的参数完成查询操作。

创建 SHELL 任务并设置参数:

用户需要传递参数,在定义 SHELL 脚本时,需要输出格式为 ${setValue(key=value)} 的语句,key 为对应参数的 prop,value 为该参数的值。

创建 Node_A 任务,在自定义参数中添加 output 和 value 参数,并编写如下脚本:

在这里插入图片描述

参数说明:

  • value:方向选择为 IN,并赋值为 66
  • output:方向选择为 OUT,通过脚本 '${setValue(output=1)}' 赋值,并传递给下游参数

SHELL 节点定义时当日志检测到 ${setValue(output=1)} 的格式时,会将 1 赋值给 output,下游节点便可以直接使用变量 output 的值。同样,您可以在【工作流实例】页面,找到对应的节点实例,便可以查看该变量的值。

创建 Node_B 任务,主要用于测试输出上游任务 Node_A 传递的参数。

在这里插入图片描述

创建 SQL 任务并使用参数:

完成上述的 SHELL 任务之后,我们可以使用上游所传递的 output 作为 SQL 的查询对象。其中将所查询的 id 重命名为 ID,作为参数输出。

在这里插入图片描述

注:如果 SQL 节点的结果只有一行,一个或多个字段,参数的名字需要和字段名称一致。数据类型可选择为除 LIST 以外的其他类型。变量会选择 SQL 查询结果中的列名中与该变量名称相同的列对应的值。

如果 SQL 节点的结果为多行,一个或多个字段,参数的名字需要和字段名称一致。数据类型选择为 LIST。获取到 SQL 查询结果后会将对应列转化为 LIST,并将该结果转化为 JSON 后作为对应变量的值。

保存工作流并设置全局参数:点击保存工作流图标,并设置全局参数 output 和 value。

在这里插入图片描述

查看运行结果:创建完成工作流之后,上线运行该工作流,查看其运行结果。

Node_A 运行结果如下:

在这里插入图片描述

Node_B 运行结果如下:

在这里插入图片描述

Node_mysql 运行结果如下:

在这里插入图片描述

虽然在 Node_A 的脚本中为 output 赋值为 1,但日志中显示的值仍然为 100。但根据参数优先级的原则:本地参数 > 上游任务传递的参数 > 全局参数,在 Node_B 中输出的值为 1。则证明 output 参数参照预期的值在该工作流中传递,并在 Node_mysql 中使用该值完成查询操作。

但是 value 的值却只有在 Node_A 中输出为 66,其原因为 value 的方向选择为 IN,只有当方向为 OUT 时才会被定义为变量输出。

Python 任务传递参数:

使用 print('${setValue(key=%s)}' % value),DolphinScheduler会捕捉输出中的 ${setValue(key=value}来进行参数捕捉,从而传递到下游

在这里插入图片描述

3.4.5 参数优先级

DolphinScheduler 中所涉及的参数值的定义可能来自三种类型:

  • 全局参数:在工作流保存页面定义时定义的变量
  • 上游任务传递的参数:上游任务传递过来的参数
  • 本地参数:节点的自有变量,用户在“自定义参数”定义的变量,并且用户可以在工作流定义时定义该部分变量的值

因为参数的值存在多个来源,当参数名相同时,就需要会存在参数优先级的问题。DolphinScheduler 参数的优先级从高到低为:本地参数 > 上游任务传递的参数 > 全局参数

在上游任务传递的参数中,由于上游可能存在多个任务向下游传递参数,当上游传递的参数名称相同时:

  • 下游节点会优先使用值为非空的参数
  • 如果存在多个值为非空的参数,则按照上游任务的完成时间排序,选择完成时间最早的上游任务对应的参数
3.4.5.1 例子

下面例子向你展示如何使用任务参数传递的优先级问题

1:先以 shell 节点解释第一种情况

在这里插入图片描述

节点 【useParam】可以使用到节点【createParam】中设置的变量。而节点 【useParam】与节点【noUseParam】中并没有依赖关系,所以并不会获取到节点【noUseParam】的变量。上图中只是以 shell 节点作为例子,其他类型节点具有相同的使用规则。

在这里插入图片描述

其中节点【createParam】在使用变量时直接使用即可。另外该节点设置了 “key” 和 “key1” 两个变量,这里用户用定义了一个与上游节点传递的变量名相同的变量 key1,并且赋值为 “12”,但是由于我们设置的优先级的关系,这里的值 “12” 会被使用,最终上游节点设置的变量值会被抛弃。

2:我们再以 sql 节点来解释另外一种情况

在这里插入图片描述

节点【use_create】的定义如下:

在这里插入图片描述

“status” 是当前节点设置的节点的自有变量。但是用户在保存工作流时也同样设置了 “status” 变量(全局参数),并且赋值为 -1。那在该 SQL 执行时,status 的值为优先级更高的 2。抛弃了全局变量中的值。

这里的 “id” 是上游节点设置的变量,用户在节点【createParam1】、节点【createParam2】中设置了相同参数名 “id” 的参数。而节点【use_create】中使用了最先结束的【createParam1】的值。

3.5 数据源中心

3.5.1 MySQL 数据源

在这里插入图片描述

  • 数据源:选择 MYSQL
  • 数据源名称:输入数据源的名称
  • 描述:输入数据源的描述
  • IP 主机名:输入连接 MySQL 的 IP
  • 端口:输入连接 MySQL 的端口
  • 用户名:设置连接 MySQL 的用户名
  • 密码:设置连接 MySQL 的密码
  • 数据库名:输入连接 MySQL 的数据库名称
  • Jdbc 连接参数:用于 MySQL 连接的参数设置,以 JSON 形式填写
3.5.1.1 是否原生支持

否,使用前需请参考 数据源配置 中的 “数据源中心” 章节激活数据源。

3.5.2 PostgreSQL 数据源

在这里插入图片描述

  • 数据源:选择 POSTGRESQL
  • 数据源名称:输入数据源的名称
  • 描述:输入数据源的描述
  • IP 主机名:输入连接 POSTGRESQL 的 IP
  • 端口:输入连接 POSTGRESQL 的端口
  • 用户名:设置连接 POSTGRESQL 的用户名
  • 密码:设置连接 POSTGRESQL 的密码
  • 数据库名:输入连接 POSTGRESQL 的数据库名称
  • Jdbc 连接参数:用于 POSTGRESQL 连接的参数设置,以 JSON 形式填写
3.5.2.1 是否原生支持

是,数据源不需要任务附加操作即可使用。

3.5.3 HIVE 数据源

3.5.3.1 使用HiveServer2

在这里插入图片描述

  • 数据源:选择 HIVE
  • 数据源名称:输入数据源的名称
  • 描述:输入数据源的描述
  • IP 主机名:输入连接 HIVE 的 IP
  • 端口:输入连接 HIVE 的端口
  • 用户名:设置连接 HIVE 的用户名
  • 密码:设置连接 HIVE 的密码
  • 数据库名:输入连接 HIVE 的数据库名称
  • Jdbc 连接参数:用于 HIVE 连接的参数设置,以 JSON 形式填写

注意:如果您希望在同一个会话中执行多个 HIVE SQL,您可以修改配置文件 common.properties 中的配置,设置 support.hive.oneSession = true。 这对运行 HIVE SQL 前设置环境变量的场景会很有帮助。参数 support.hive.oneSession 默认值为 false,多条 SQL 将在不同的会话中运行。

3.5.3.2 使用 HiveServer2 HA Zookeeper

在这里插入图片描述

注意:如果没有开启 kerberos,请保证参数 hadoop.security.authentication.startup.state 值为 false, 参数 java.security.krb5.conf.path 值为空. 开启了 kerberos,则需要在 common.properties 配置以下参数

# whether to startup kerberos
hadoop.security.authentication.startup.state=true

# java.security.krb5.conf path
java.security.krb5.conf.path=/opt/krb5.conf

# login user from keytab username
login.user.keytab.username=hdfs-mycluster@ESZ.COM

# login user from keytab path
login.user.keytab.path=/opt/hdfs.headless.keytab
3.5.3.3 是否原生支持

是,数据源不需要任务附加操作即可使用。

3.5.4 Spark

  • 数据源:选择 Spark
  • 数据源名称:输入数据源的名称
  • 描述:输入数据源的描述
  • IP/主机名:输入连接Spark的IP
  • 端口:输入连接Spark的端口
  • 用户名:设置连接Spark的用户名
  • 密码:设置连接Spark的密码
  • 数据库名:输入连接Spark的数据库名称
  • Jdbc连接参数:用于Spark连接的参数设置,以JSON形式填写

注意:如果开启了kerberos,则需要填写 Principal

在这里插入图片描述

3.5.4.1 是否原生支持

是,数据源不需要任务附加操作即可使用。

3.5.5 Amazon Athena 数据源

在这里插入图片描述

  • 数据源:选择 ATHENA
  • 数据源名称:输入数据源的名称
  • 描述:输入数据源的描述
  • 用户名:设置连接 AWS 的 access key
  • 密码:设置连接 AWS 的 secret access key
  • AwsRegion: 设置连接 AWS 的区域
  • 数据库名:输入连接 ATHENA 的数据库名称
  • Jdbc 连接参数:用于 ATHENA 连接的参数设置,以 JSON 形式填写
3.5.5.1 是否原生支持
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值