乐趣区

关于dolphinscheduler:DophineSheduler上下游任务之间动态传参案例及易错点总结

作者简介

淡丹

数仓开发工程师

5 年数仓开发教训,目前次要负责百得利 MOBY 新车业务

二手车业务及售后服务业务零碎数仓建设

业务需要

在 ETL 工作之间调度时,咱们有的时候会须要将上游的计算结果作为参数传入到上游,针对这种业务需要,海豚调度器为咱们提供了一些性能。

具体如下:

DolphinScheduler 容许在工作间进行 参数传递,目前传递方向仅反对上游单向传递给上游。

反对这个个性的工作类型有:

  • Shell
  • SQL

当定义上游节点时,如果有须要将该节点的后果传递给有依赖关系的上游节点,须要在【以后节点设置 】的【 自定义参数】设置一个方向是 OUT 的变量。

目前咱们次要针对 SQL 和 SHELL 节点做了能够向下传递参数的性能。

SQL 工作

步骤 1:SQL 工作构建

测试 SQL 如下

select label_id,label_name from (

具体如下图

留神点

  1. 方向抉择为 OUT,只有当方向为 OUT 时才会被定义为变量输入
  2. 数据类型 能够依据须要抉择不同数据结构
  3. Value 局部 不须要填写
  4. 参数名字肯定要和字段名字对应,否则不会辨认

如果 SQL 节点的后果为多行,一个或多个字段,参数的名字须要和字段名称统一。

数据类型抉择为 LIST。获取到 SQL 查问后果 后会将对应列转化为 LIST,并将该后果转化为 JSON 后作为对应变量的值。(留神新版本才会有,低版本没有 LIST 构造)

步骤 2:SHELL 脚本测试

留神此处,输出参数不须要填写,上游间接援用上游的变量即可

步骤 3: 上线验证后果

查看后果日志,能够看到上游节点曾经接管到参数

SHELL 工作

先看官网阐明(链接):

https://dolphinscheduler.apac…

  1. prop 为用户指定;
  2. 方向抉择为 OUT,只有当方向为 OUT 时才会被定义为变量输入;
  3. 数据类型 能够依据须要抉择不同数据结构;
  4. value 局部不须要填写;

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

例如下图

SHELL 节点定义的时候

日志检测到 ${setValue(key=value1)} 的格局时,会将 value1 赋值给 key,上游节点便能够间接应用变量 key 的值。

同样,您能够在 【工作流实例】 页面,找到对应的节点实例,便能够查看该变量的值。

但在理论应用中官网的例子是跑不通的,这外面有小坑,上述在应用 ${setValue(key=value)} 这种模式传参的时候必须用引号引起来。

如下能力胜利

echo ‘${setValue(key=value)}’

案例所示

上线执行后查看日志如下:

能够看到后果曾经打印进去。

如果取掉单引号会报如下谬误:语法上就无奈通过

所以在 SHELL 中传参的时候,依据给的固定语法前,必须得加上单引号,否则语法无奈通过。

上述的例子也仅仅是 Key 前面跟的常量参数,事实上咱们往往都是须要动静传参数的,所以 SHELL 的这种动态传递参数给上游其实是没有意义的,因为如果是动态的,咱们为什么不抉择 in 中输出参数呢?

如下图所示

咱们在不同工作之间上下游之间的参数传递,往往是须要动静的 / 上游某个代码执行后的后果传递给上游。

咱们无妨来试试这种形式是否能够?依据猜测咱们编写如下案例:

工作 1:

工作 2:

查看 test2 的日志 并未有任何执行后果打印出

依据下面的猜想,因为在应用的时候咱们整体上 加了单引号 ,又依据 shell 语法的教训, 所以笔者决定在援用变量的时候再加单引号试试,也就是如下模式:

echo ‘${setValue(key=’$value’)}’

咱们来持续试验:

value=`date`

查看工作 2 的执行后果日志:

咱们看到呈现了最终想要的执行后果日志, 也就是说想要 动静传参 必须采纳如下模式能力胜利~

echo ‘${setValue(key=’$value’)}’

留神 :在海豚调度器在 3.0.0-beta-1 版本后修复了这一问题,能够更好的反对动静传参问题, 比方动静地获取现有的本地或 HTTP 资源并获取设定变量

具体应用办法如下:

lines_num=$(wget https://raw.githubusercontent.com/apache/dolphinscheduler/dev/README.md -q -O - | wc -l | xargs)

总体传参串联工作案例

第一步:设置工作输入参数

第二步:获取第一步参数并打印输出,且持续传参

第三步:应用 SQL 语句获取第一步传递的参数,并把后果传递给上游。

援用参数时候,间接援用自定义输入参数的 Key 就能够了,比方本案例的 output ,个别采纳 ${output} 的模式,具体如下图所示:

第四步:获取第三步的执行后果参数,并将后果输入~

【留神点】如果是 sql 工作:sql 结尾不要有分号(;)否则会报错。

整体流程如下图所示

查看最终(邮件后果)如下:

工作 4 日志信息:能够看到已生成后果信息

小结

本文总结了 DophineSheduler 上下游工作之间参数传递的办法,并对其中的易错点进行了梳理,同时给出了具体参数传递的案例,读者可自行进行摸索。

其中易错点归纳如下:

(1)参数输入时方向抉择为 out

(2)sql工作时参数的 key 值肯定和 sql 语句中的字段名保持一致,否则不辨认

(3)输入的 value 值 不须要填写

(4)shell工作时,具体参考如下模板,模板中留神引号的应用

echo ‘${setValue(key=’$value’)}’

留神此处等号右边的 key 须要和自定义输入的参数 key 名字统一

(5)sql 工作中结尾不要有分号

(6)援用参数时只须要采纳 ${key} 即可

最初,如果对这个话题感兴趣的话,能够进群一起交换沟通,谢谢大家~

最初十分欢送大家退出 DolphinScheduler 小家庭,融入开源世界!


咱们激励任何模式的参加社区,最终成为 Committer 或 PPMC,如:

  • 将遇到的问题通过 GitHub 上 issue 的模式反馈进去。
  • 答复他人遇到的 issue 问题。
  • 帮忙欠缺文档。
  • 帮忙我的项目减少测试用例。
  • 为代码增加正文。
  • 提交修复 Bug 或者 Feature 的 PR。
  • 发表利用案例实际、调度流程剖析或者与调度相干的技术文章。
  • 帮忙推广 DolphinScheduler,参加技术大会或者 meetup 的分享等。

欢送退出奉献的队伍,退出开源从提交第一个 PR 开始。

  • 比方增加代码正文或找到带有”easy to fix”标记或一些非常简单的 issue(拼写错误等) 等等,先通过第一个简略的 PR 相熟提交流程。

注:奉献不仅仅限于 PR 哈,对促成我的项目倒退的都是奉献。

置信参加 DolphinScheduler,肯定会让您从开源中受害!

参加奉献

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真挚欢送酷爱开源的搭档退出到开源社区中来,为中国开源崛起献上一份本人的力量,让外乡开源走向寰球。

参加 DolphinScheduler 社区有十分多的参加奉献的形式,包含:

奉献第一个 PR(文档、代码) 咱们也心愿是简略的,第一个 PR 用于相熟提交的流程和社区合作以及感触社区的友好度。

社区汇总了以下适宜老手的问题列表:https://github.com/apache/dol…

非老手问题列表:https://github.com/apache/dol…

如何参加奉献链接:https://dolphinscheduler.apac…

来吧,DolphinScheduler 开源社区须要您的参加,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是微小的。

来吧,开源社区十分期待您的参加。

退出移动版