使用DataWorks调度DLA循环任务

DataWorks是阿里云上的一款热门产品,可以为用户提供大数据开发调度服务。它支持了Data Lake Analytics(后文简称DLA)以后,DLA用户可以通过它进行定时任务调度,非常方便。本文将主要介绍如何使用DataWorks调度DLA的循环任务。

场景

使用DLA对历史数据按天做清洗。数据清洗的SQL是固定的,只是每次执行的时候需要传入不同的日期。

对于这个场景,我们需要:

  1. 部署一个赋值节点。该节点负责输出日期值,并作为下游循环节点的输入。
  2. 部署一个循环节点。该节点包含用来做数据清洗的一个或者一组SQL,其中关于日期取值是一个变量。每次循环输入值由赋值节点提供。

DataWorks操作

步骤一:新建业务流程和节点

登录DataWorks的控制台,并创建一个业务流程或使用原有的业务流程。

c16abb387295149e17e8ddd6b848b3d1059.jpg

在新建的业务流程下,创建一个赋值节点和一个循环节点。

c7540cd48b29ce29b5db0325e2478674703.jpg

步骤二:配置赋值节点

打开节点“日期集合”的编辑页面。这里我们选择SHELL语言,将要执行的日期值写在一个数组里。

4003eae9cad8455bae9c551de8ab9c44382.jpg

打开节点“日期集合”的调度配置页面。
在这里需要给赋值节点设置一个上游节点,这里可以设置为当前工作空间的root。比如我的工作空间名字叫jinluo_poc,则该节点为jinluo_poc_root。66444b54b00751ee1b48b942b39a3884131.jpg

步骤三:配置循环节点

双击循环节点进入编辑页面。可以看到三个节点,分别是start, sql和end。这里我们需要新建一个DLA的任务节点,并把sql替换为一个DLA的任务节点。798983ab2c623fa6f2edb31ba42d112edd2.jpg

在调度配置页面设置依赖关系和节点上下文。上游节点设置为赋值节点“日期集合”,本节点的输入为赋值节点的输出。
b7fc11aef918787b532615e66d39bf0014c.jpg

设置DLA_SQL节点

选择一个DLA的数据源,并填写SQL。87287e2180c063f3d9a4ea8458b3f64f000.jpg

这里面的pure_date的值是从赋值节点读入的。每次读取赋值节点的输出结果数组中的一个值。写法是固定的,如下所示。

h.`pure_date`=${dag.input[${dag.offset}]}
  • dag.offset,这个是DataWorks系统的保留变量,代表每一次循环次数相对于第一次的偏移量。即第一次循环中offset为0、第二次为1、第三次为2…第n次为n-1
  • dag.input,这个变量是用户配置的循环节点的上下文依赖。循环节点内部节点如果需要引用这个上下文依赖的值,可以直接用0064.png?V=2.7.20061.png?V=2.7.20067.png?V=2.7.2002E.png?V=2.7.20024.png?V=2.7.20063.png?V=2.7.20074.png?V=2.7.20078.png?V=2.7.2004B.png?V=2.7.20065.png?V=2.7.20079.png?V=2.7.2的方式来引用,因为上文中配置的上下文依赖006B.png?V=2.7.20065.png?V=2.7.20079.png?V=2.7.20069.png?V=2.7.2006E.png?V=2.7.20070.png?V=2.7.20075.png?V=2.7.20074.png?V=2.7.2,因此可以使用dag.$ctxKey的方式来引用,因为上文中配置的上下文依赖key为input,因此可以使用{dag.input}来引用这个值
  • 0064.png?V=2.7.20061.png?V=2.7.20067.png?V=2.7.2002E.png?V=2.7.20069.png?V=2.7.2006E.png?V=2.7.20070.png?V=2.7.20075.png?V=2.7.20074.png?V=2.7.2005B.png?V=2.7.20024.png?V=2.7.20064.png?V=2.7.20061.png?V=2.7.20067.png?V=2.7.2002E.png?V=2.7.2006F.png?V=2.7.20066.png?V=2.7.20066.png?V=2.7.20073.png?V=2.7.20065.png?V=2.7.20074.png?V=2.7.2005D.png?V=2.7.2:节点数据集初始化的输出是一个表格,0044.png?V=2.7.20061.png?V=2.7.20074.png?V=2.7.20061.png?V=2.7.20057.png?V=2.7.2006F.png?V=2.7.20072.png?V=2.7.2006B.png?V=2.7.20073.png?V=2.7.2是可以用偏移量的方式来获取表格数据的某一行的。由于每次循环中0064.png?V=2.7.20061.png?V=2.7.20067.png?V=2.7.2002E.png?V=2.7.2006F.png?V=2.7.20066.png?V=2.7.20066.png?V=2.7.20073.png?V=2.7.20065.png?V=2.7.20074.png?V=2.7.2的值是从0030.png?V=2.7.2开始递增的,所以最后0065.png?V=2.7.20063.png?V=2.7.20068.png?V=2.7.2006F.png?V=2.7.2出来的数据应该就是dag.input[$dag.offset]:节点数据集初始化的输出是一个表格,DataWorks是可以用偏移量的方式来获取表格数据的某一行的。由于每次循环中dag.offset的值是从0开始递增的,所以最后echo出来的数据应该就是{dag.input[0]}、${dag.input[1]}以此类推达到遍历数据集的效果

设置end节点

该节点的作用是控制循环的结束。
end节点的结束条件:是把dag.loopTimes进行比较,小于则输出True继续循环;不小于则输出False退出循环。dag.input.length变量,标识上下文参数input数组的行数。是系统自动根据节点配置的上下文下发的变量。

152e742f71a1c9e2d8256100baf7c6c7c3d.jpg

if ${dag.loopTimes} < ${dag.input.length}:
 print True
else:
 print False

在调度配置页面,需要设置上游节点。

efbe0bf7c23306ea72a2e7a69dcd57810b6.jpg

设置完成,保存后,可以看到循环节点变更为

94d693550a684b09150591b25a9785b9f30.jpg

步骤四:发布

目前在DataWorks的开发界面暂不支持循环节点的运行,需要提交后在运维中心测试运行。
分别点击 “日期集合”和“数据清洗SQL”页面上的“提交按钮”进行提交。

e212b6b19a0fbb6240cc539d00086eebc86.jpg

在提交循环节点时,注意要勾选上所有的节点。

cb51b18af2764f6e93cdd3f39ac657f41e9.jpg

步骤五:运行

进入运维中心页面,在周期任务的列表里面可以看到我们刚刚提交的两个作业。

b6cd8d59b604e29ed74d392a20f5331afcd.jpg

右键“日期集合” -> 补数据 -> 当前节点及下游节点 可以手动执行该组任务。

d3b9c1bdf109cc016c9f72db41f1bcbc0e6.jpg

提交后可以看到每个节点的运行状态。

60f87e2d822d8f1aff70cc4f2f2a80de8dd.jpg


原文链接
本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/u/1464083/blog/3040452

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值