Oozie是一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。
Oozie工作流定义,同JBoss jBPM提供的jPDL一样,也提供了类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义。对于工作流系统,一般都会有很多不同功能的节点,比如分支、并发、汇合等等,Oozie也有类似的一些概念,不做过多解释,更多信息可以参考相关文档。
这里,简单描述一下,Oozie定义了控制流节点(Control Flow Nodes)和动作节点(Action Nodes),其中控制流节点定义了流程的开始和结束,以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop map-reduce、Hadoop文件系统、Pig、SSH、HTTP、eMail和Oozie子流程。
下面我们看一下,官方文档中给出的定义流程的例子,流程定义示例如图所示:
这个流程图表达了WordCount统计词频的流程编排功能,非常简单,启动执行一个MapReduce任务,如果成功则正常结束,如果失败则取消该任务。
上图对应的hPDL定义文件,内容如下所示:
<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.1"> <start to='wordcount' /> <action name='wordcount'> <map-reduce> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.mapper.class</name> <value>org.myorg.WordCount.Map</value> </property> <property> <name>mapred.reducer.class</name> <value>org.myorg.WordCount.Reduce</value> </property> <property> <name>mapred.input.dir</name> <value>${inputDir}</value> </property> <property> <name>mapred.output.dir</name> <value>${outputDir}</value> </property> </configuration> </map-reduce> <ok to='end' /> <error to='end' /> </action> <kill name='kill'> <message>Something went wrong: ${wf:errorCode('wordcount')}</message> </kill> <end name='end' /> </workflow-app>
这个XML文件描述地就是上图表达的流程含义,如果熟悉Hadoop平台的话,对上面的内容非常容易理解。当然,这里只有一个MapReduce任务,试想如果一个计算系统需要执行更加复杂的逻辑,比如对应很多个MR,还有其他类似的动作节点(Action Nodes),如果能够通过流程描述出来,加上可视化功能,非常直观,省去了我们手工进行编排的麻烦。
另外,Oozie还具有很多功能,而且扩展性很好。更多内容,可以查看文档:http://archive.cloudera.com/cdh4/cdh/4/oozie/。
参考链接
- http://oozie.apache.org/
- http://archive.cloudera.com/cdh4/cdh/4/oozie/DG_Overview.html
- http://archive.cloudera.com/cdh4/cdh/4/oozie/DG_Examples.html
- http://archive.cloudera.com/cdh4/cdh/4/oozie/WorkflowFunctionalSpec.html
- http://archive.cloudera.com/cdh4/cdh/4/oozie/CoordinatorFunctionalSpec.html
- https://cwiki.apache.org/confluence/display/OOZIE/Map+Reduce+Cookbook
本文基于署名-非商业性使用-相同方式共享 4.0许可协议发布,欢迎转载、使用、重新发布,但务必保留文章署名时延军(包含链接:http://shiyanjun.cn),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
博主我想问下, Oozie只能在linux下使用吗,能在windows下面使用吗?
目前应该是不支持Windows的
博主,你好。
我想问一下oozie 提交一个job,需要执行10多分钟, mr其实已经执行完成了,这个是怎么回事?
你可以查看一下Oozie的日志,或者可能是Oozie的页面控制台缓存造成的吧
博主,你好
我想问下,oozie会先启动一个MR任务,监视作业的运行。我遇到的问题是,在多任务并发的情况时,可能出现所有资源启动的任务只有监视的任务,真正的功能任务得不到资源运行。从而出现作业执行不下去,所有作业饿死的情况。您有什么好的解决方法么
你可以减少任务并发度,最坏的情况就是所有任务串行,这依赖于你集群的资源量。另外,在写Oozie workflow的时候,可一个根据实际任务的资源用量,修改默认的配置,比如一个MR可能只需要1G的container,但是YARN配置默认是4G,你完全可以配置这个MR的申请资源量为1G。
你好,我在hue界面上可以成功用oozie调度运行mapreduce的例子,可是调度spark和hive就会报错如下: ERROR E0701: XML schema error, cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘spark’.请问这个问题怎么解决呢?
多数是配置问题吧,在安装hue的时候,看看官方文档,确认哪个版本的hue与哪个版本的spark、hive兼容,然后再安装配置。目前,我还我也没有在hue上用过spark。