博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache Oozie Coordinator 作业自定义配置定时任务
阅读量:5101 次
发布时间:2019-06-13

本文共 3185 字,大约阅读时间需要 10 分钟。

一,介绍

Oozie是Hadoop的工作流系统,如果使用Oozie来提交MapReduce作业(Oozie 不仅仅支持MapReduce作业,还支持其他类型的作业),可以借助Oozie Coordinator 作业来实现定时运行。

对于Oozie的作业而言,在它提交给Hadoop之前首先需要部署好。即,将配置文件(定时作业是coordinator.xml,workflow作业则是workflow.xml)、可执行的jar文件、还有待处理的输入数据上传到HDFS上。

一个典型的workflow作业的配置如下:

其中,对应的配置文件workflow.xml如下:

其中,SampleMapper 和 SampleReducer则是 将写好的MapReduce程序的Mapper类和Reducer类

然后,再在命令行使用 oozie -job ....就可以把作业提交到Hadoop运行了。

 

二,定时作业的配置及提交运行

这是本文的重点。

Oozie使用Coordinator作业来实现定时功能,对于一个定时作业,同时也需要配置文件。即:coordinator.xml。一个简单的示例如下:

frequency 、start、end  分别表示作业的运行频率、起始时间和结束时间。

这里全用变量来代替:${frequency}、${start}、${end} 这样,在提交作业时,只需要给这些变量赋值,就可以重用同一个coordinator配置文件了。

需要注意: <app-path> 可执行jar文件的路径。可以这样理解,对于一个定时作业,它本质上还是workflow作业,只不过是在workflow作业上加上了定时功能而已。因此,它需要<app-path>标签 来指明 workflow作业的部署的jar文件HDFS地址。

在每次提交作业时,只需要重新改变frequency、start、end 还有workflow 的app-path ${workflowAppUri}就可以保证基本的定时作业都使用同一个模板coordinator.xml配置文件了。

1     public static String getXmlDataForCoordinatorFreq(String appPath, String frequency, String start, String end){ 2         StringBuilder sb = new StringBuilder(); 3          4         sb.append("
"); 5 sb.append("
"); 6 sb.append( "
"); 7 sb.append( "
user.name
"); 8 sb.append( "
" + USER_NAME + "
"); 9 sb.append( "
");10 sb.append( "
");11 sb.append( "
jobTracker
");12 sb.append( "
" + JOB_TRACKER + "
");13 sb.append( "
");14 sb.append( "
");15 sb.append( "
nameNode
");16 sb.append( "
" + NAME_NODE + "
");17 sb.append( "
");18 sb.append( "
");19 sb.append( "
oozie.coord.application.path
");20 sb.append( "
" + COORDINATOR_CONFIG_FREQ + "
");21 sb.append( "
");22 sb.append( "
");23 sb.append( "
workflowAppUri
");24 sb.append( "
" + appPath + "
");25 sb.append( "
");26 sb.append( "
");27 sb.append( "
start
");28 sb.append( "
" + start + "
");29 sb.append( "
");30 31 sb.append( "
");32 sb.append( "
frequency
");33 sb.append( "
" + frequency + "
");34 sb.append( "
");35 36 sb.append( "
");37 sb.append( "
end
");38 sb.append( "
" + end + "
");39 sb.append( "
");40 sb.append("
");41 42 return sb.toString();43 }

由于Oozie支持RestClient API,提交作业。因此,通过构造 HTTP 请求,带上上面的配置参数,即可实现定时作业的提交。

 

转载于:https://www.cnblogs.com/hapjin/p/5541786.html

你可能感兴趣的文章
MySQL表的四种分区类型
查看>>
7.26
查看>>
dll--二进制层面的复用
查看>>
linux 压缩/解压缩/打包命令
查看>>
守护进程
查看>>
CLR 关于强命名程序集 .
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
GIS当然可以很酷
查看>>
java.lang. StringBuilder
查看>>
Apple iOS内部开发秘密代号灵感来自滑雪胜地名称
查看>>
第四次作业
查看>>
四则运算2测试
查看>>
软件需求与分析课堂讨论一
查看>>
源码编译方式安装mysql服务 (Centos 6.X)
查看>>
iOS深入学习(UITableView系列2:reloadData)
查看>>
如何使用github上传自己的开源项目教程
查看>>
js网页倒计时功能(天,时,分,秒)
查看>>
简单的rest template,并且gradle打成可执行的jar包
查看>>
对象序列化与反序列化
查看>>
ABP 番外篇-容器
查看>>