Oozie是一个管理Hadoop作业、可伸缩、可扩展、可靠的工作流调度系统,它内部定义了三种作业:
-
工作流作业:由一系列动作构成的有向无环图(DAGs)
-
协调器作业:按时间频率周期性触发Oozie工作流的作业
3.Bundle作业:管理协调器作业
一、首先示例提交HiveSQL脚本- 即时执行
1.进入到hue界面,点击【Query】- 【Schedule】- 【WorkFlow】,编辑工作流WorkFlows,
点击进去后,支持的Action会有很多,如下图:
hive/spark/pig/shell/Java/MR…
2.起一个workFlow的名称
3.将hive2拖拽到指定位置
4.然后,上传存在于HDFS上的脚本文件,如果没有上传,那么可以首先上传
5.上传脚本文件:
test_workflow_query.hql的内容:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=3000;
insert into test_workflow_query partition(h)
select cast(ceil(rand()*100)as string), unix_timestamp(), cast(from_unixtime(unix_timestamp(), ‘yyyy-MM-dd’) as string) as h
6.然后点击“Add”添加,接下来点击保存,点击运行,点击submit
7.查看运行状态,可以点击进去看具体的任务
8.看结果
运行前表中的数据:
运行会后表中的数据:
二、看一个结构多一点的WorkFlow过程(一个Shell脚本+Hive脚本+参数)
1.返回到WorkFlow的界面,点击编辑,把个刚刚的WorFlow重新编辑
2.添加shell脚本和另外一个hive脚本,仅实现查询
Shell脚本(test_workflow_query_sh.sh):
#!/bin/bash
hive -e ‘select * from test_workflow_query’
echo $?
echo “与hive任务并行执行!!!”
HiveSQL脚本:
select ${hivevar:fields}
from ${tablename};
3.指定参数及文件
如果没有指定shell的files,出现的问题是:
4.点击【保存】- 【执行】
5.看结果
shell的log :
最底下Hive的log:
三、实现一个coordinate(新版这里是Schedules)
1.如图进行创建
2.指定Schedules名称
3.选择要指定的workFlow,按照时间频率周期性触发Oozie工作流的作业
4.指定规则的按
5.可以切换时间编辑格式,分别为有好的和crontab格式的
这里要注意的是,在指定周期的时候,他会按照指定的开始时间开始执行,因此这里可以【重跑数据数据】
6.关于参数
这里的参数指的是workflow中需要指定的参数
咱们可以试着调节这里的参数:
6.1在【first_WorkFlow】中进行修改
6.2点击进去之后
6.3然后进行存储,之后再进入到【first_WorkFlow】进行配置
6.4点击保存,之后去Schedule中配置
指定Parameters,这里给出的参数是当天的参数
以及时区的zhi’ding
${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实例执行时间 |
那么,最后,看看刚刚的Scheme跑的情况:
正在执行
已有四个WokeFlow执行成功
四、实现Bundle
创建Bundle,然后添加coordinator
可以进行集中的管理!
参考网址:https://blog.csdn.net/yaojianguo1234/article/details/80068009