hue中生成oozie任务传参(shell任务)

1 篇文章 0 订阅

在hue中,oozie任务分为4层:

1.action(可以是hive任务,spark任务,shell脚本等),下图所示就是一个shell任务:

 2.workflow,顾名思义,一个workflow就是多个action组成的DAG流:

 3.schedule是对workflow的重复调用,你可以一小时执行一次,也可以一天执行一次。

下图的例子就是每天4:25执行一次

 4,.bundle则可以绑定多个调度,这里不细讲了。

 

脚本中传参(shell,hive)

如果要传入一些oozie的系统参数,如时间等,传入到hive或者shell脚本,则要懂schedule开始往地下传。

首先,要再action中配置参数,hive和shell脚本配置方式还不一样。

hive中,直接可以接受workflow中传入的参数

例如,hive脚本:

use ${database};
show tables;

 workflow配置如下

 

在schedule中再配置响应的参数就可以了:

但shell脚本却有些不同,shell脚本中的参数不能像hive中设置参数名,只能像普通的shell脚本一样,通过$1,$2,$3来传递参数,因此,shell脚本还要先建一个shell script:

这个参数的顺序对应shell中的$1,$2,$3。

然后在workflow中加入参数传递

schedule中同样加入参数(取前一天的日期) ${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyyMMdd')}:

这样传参顺利完成。

附录:oozie常见系统常量:

常量表示形式含义说明
${coord:minutes(int n)}返回日期时间:从一开始,周期执行n分钟
${coord:hours(int n)}返回日期时间:从一开始,周期执行n * 60分钟
${coord:days(int n)}返回日期时间:从一开始,周期执行n * 24 * 60分钟
${coord:months(int n)}返回日期时间:从一开始,周期执行n * M * 24 * 60分钟(M表示一个月的天数)
${coord:endOfDays(int n)}返回日期时间:从当天的最晚时间(即下一天)开始,周期执行n * 24 * 60分钟
${coord:endOfMonths(1)}返回日期时间:从当月的最晚时间开始(即下个月初),周期执行n * 24 * 60分钟
${coord:current(int n)}返回日期时间:从一个Coordinator动作(Action)创建时开始计算,第n个dataset实例执行时间
${coord:dataIn(String name)}在输入事件(input-events)中,解析dataset实例包含的所有的URI
${coord:dataOut(String name)}在输出事件(output-events)中,解析dataset实例包含的所有的URI
${coord:offset(int n, String timeUnit)}表示时间偏移,如果一个Coordinator动作创建时间为T,n为正数表示向时刻T之后偏移,n为负数向向时刻T之前偏移,timeUnit表示时间单位(选项有MINUTE、HOUR、DAY、MONTH、YEAR)
${coord:hoursInDay(int n)}指定的第n天的小时数,n>0表示向后数第n天的小时数,n=0表示当天小时数,n<0表示向前数第n天的小时数
${coord:daysInMonth(int n)}指定的第n个月的天数,n>0表示向后数第n个月的天数,n=0表示当月的天数,n<0表示向前数第n个月的天数
${coord:tzOffset()}ataset对应的时区与Coordinator Job的时区所差的分钟数
${coord:latest(int n)}最近以来,当前可以用的第n个dataset实例
${coord:future(int n, int limit)}当前时间之后的dataset实例,n>=0,当n=0时表示立即可用的dataset实例,limit表示dataset实例的个数
${coord:nominalTime()}nominal时间等于Coordinator Job启动时间,加上多个Coordinator Job的频率所得到的日期时间。例如:start=”2009-01-01T24:00Z”,end=”2009-12-31T24:00Z”,frequency=”${coord:days(1)}”,frequency=”${coord:days(1)},则nominal时间为:2009-01-02T00:00Z、2009-01-03T00:00Z、2009-01-04T00:00Z、…、2010-01-01T00:00Z
${coord:actualTime()}Coordinator动作的实际创建时间。例如:start=”2011-05-01T24:00Z”,end=”2011-12-31T24:00Z”,frequency=”${coord:days(1)}”,则实际时间为:2011-05-01,2011-05-02,2011-05-03,…,2011-12-31
${coord:user()}启动当前Coordinator Job的用户名称
${coord:dateOffset(String baseDate, int instance, String timeUnit)}计算新的日期时间的公式:newDate = baseDate + instance * timeUnit,如:baseDate=’2009-01-01T00:00Z’,instance=’2′,timeUnit=’MONTH’,则计算得到的新的日期时间为’2009-03-01T00:00Z’。
${coord:formatTime(String timeStamp, String format)}格式化时间字符串,format指定
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值