通过hue执行Oozie作业

Oozie是什么?

Oozie是一种Java Web应用程序,它运行在Java servlet容器——Tomcat——中,并使用数据库来存储以下内容:

  • 工作流定义
  • 当前运行的工作流实例,包括实例的状态和变量

Hue是什么? 

Hue是一个可快速开发和调试Hadoop生态系统各种应用的一个基于浏览器的图形化用户接口。它是基于Python Django Web框架编写的。

 Hue能干什么? 

1,访问HDFS和文件浏览 
2
,通过web调试和开发hive以及数据结果展示 
3
,查询solr和结果展示,报表生成 
4
,通过web调试和开发impala交互式SQL Query 
5
spark调试和开发 
6
Pig开发和调试 
7
oozie任务的开发,监控,和工作流协调调度 
8
Hbase数据查询和修改,数据展示 
9
Hive的元数据(metastore)查询 
10
MapReduce任务进度查看,日志追踪 
11
,创建和提交MapReduceStreamingJava job任务 
12
Sqoop2的开发和调试 
13
Zookeeper的浏览和编辑 
14
,数据库(MySQLPostGresSQliteOracle)的查询和展示

提交oozie定时作业

下面例子是通过Oozie作业定时(每小时)为分区表添加一个前一小时的分区。

 1、进入hue界面,点击workflows工作流,编辑workflows

 

2、进入新建编辑后,点击默认的My Workflow后重命名。

 

3、本文以hive2作业sql任务为例,拖拽hive2action区域。

 

4、例子是为车次表每天定时添加指定分区,分区为动态传参传入,和脚本类似,参数取值用${}包围。具体sql如下:

--创建分区表

CREATE TABLE if NOT EXISTS dw_tab1 (

userid       string  ,

type string  ,

ui_net       string  

)

partitioned by (year string,mon string,day string,hour string)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

# addpart.sql

alter table dw_tab1 add partition (year=${pyear},mon=${pmon},day=${pday},hour=${phour});

 

将分区语句保存为addpart.sql,上传hdfs,通过hue上传很方便。选中上传的文件,要给出参数值,不能省略,否自运行时${}讲不会被转义。这里值依然用${}包围,是因为具体值会在scheduler中传入。保存workflow

 

5、创建scheduler,对刚才创建的workflow进行调度执行。

在点击Query->Scheduler进入新建编辑页面

 

重命名scheduler,并选择一个workflow

 

 

选择刚才创建的workflows,选择定时时间,可以选择每日,每周,每月等等,选择任务有效期,最后要给出之前参数的值,这里的值是代表前一天的日期,oozie有一些内置的常量。保存提交,OK,定时任务完成了。

 

 

点击保存后,点击右上角的运行按钮开始调度作业。

注意:如果不点击执行scheduler,调试是不会开始运行的。如果想一直调试下去可以结束时间设的比较大,这样workflow会一直在这个周期内运行。

 

 

 这样就会在每小时的5分钟会创建一个上一个小时的分区。

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指定模式

 

例如,昨天的日期就可以写为昨天日期 ${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyyMMdd')}

 

例:年月日小时

${coord:formatTime(coord:nominalTime(), 'dd')}

${coord:formatTime(coord:nominalTime(), 'MM')}

${coord:formatTime(coord:nominalTime(), 'yyyy')}

${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'HOUR'), 'HH')}

 

问题与解决办法

oozie会存在时区问题,默认会与中国时间会相差8个小时,这就需要oozie的时区,我使用的是cdh,所以设置很方便,进入cm的管理界面,进入oozie的设置,添加配置:

进入oozie配置页面,在 oozie-site.xml 的 Oozie Server 高级配置代码段(安全阀)中添加:

<property>
    <name>oozie.processing.timezone</name>
    <value>GMT+0800</value>
</property>

 


配置完需重启oozie!
 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值