整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

5.7.3关于ApacheOozie

hadoop 小红牛 7℃ 0评论


不同于在客户端运行并提交作业的]obControl, Ooize作为服务器运行,客户端提交一个立即或稍后执行的工作流定义到服务器。在Ooize中,工作流是一个由动作(action)节点和控制流节点组成的DAG(有向无环图)。

动作节点执行工作流任务,例如在HDFS中移动文件,运行MapReducePigHive作业,执行Sqoop导入,又或者是运行shell脚本或Java程序。控制流节点通过构建条件逻辑(不同执行分支的执行依赖于前一个动作节点 的输出结果)或并行执行来管理活动之间的工作流执行情况。当工作流结束 时,Oozie通过发送一个HTTP的回调向客户端通知工作流的状态。还可以在每次进入工作流或退出一个动作节点时接收到回调。

1.定义Oozie工作流

工作流定义是使用Hadoop Process Difinition LanguageXML格式来书写,这个规范可在Oozie网站(/z"p.7//«CM6a?or.apac/?e.org/oozie/)找到。范例5-14展示了一个运行单MapReduce作业的简单OoZie工作流定义。

范例5-14.用来运行求最高温度的MapReduce作业的Oozie工作流定义

<workflow-app xmlns="uri:oozie:workflow:0.1" name="max-temp-workflow">

<start to="max-temp-mr"/>

<action name="max-temp-mr">

<map-reduce>

<job-tracker>${jobTracker}</job-tracker>

 

<name-node>${nameNode}</name-node>

<prepare>

<delete path=M${nameNode}/user/${wf:user()}/output"/>

</prepare>

configuration

<property>

<name>mapred.mapper.class</name>

<value>01dMaxTemperature$01dMaxTemperatureMapper</value>

"property

<property>

<name>mapred.combiner.class</name>

<value>01dMaxTemperature$01dMaxTemperatureReducer</value>

</property>

<property>

<name>mapred.reducer.class/name>

<value>01dMaxTempenature$01dMaxTempe^atureReducer</value>

</property>

<property>

<name>mapred.output.key.class</name>

<value>org.apache.hadoop.io.Text</value>

</property>

<property>

<name>mapred.output.value.class</name>

<value>org.apache.hadoop.io.IntWritable</value>

</property>

<property>

<name>mapred.input.dir</name>

<value>/user/${wf:user()>/input/ncdc/micro</value>

</property>•

<property>

<name>mapred.output.dir</name>

<value>/user/${wf:user()}/output</value>

"property

</configuration

</map-reduce>

<ok to="end"/>

<error to="fail"/>

</action>

<kill name="fail">

<message>MapReduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}] </message>

</kill>

<end name="end"/>

</workflow-app>

这个工作流有三个控制流节点和一个动作节点:一个start控制节点、一mapreduce动作节点、一个kill控制节点和一个end控制节点。节点及其之间的转换如图5-5所示。

 图片.png 

 5-5•—个Oozie工作流的转移图

每个工作流都必须有一个start节点和一个end节点。当工作流作业开始时,它转移到有start节点指定的节点上(本例中maxtempmr动作)。当一个工作流作业转移到end节点时就意味着它成功完成了。然而,如果一个工作流作业转移到了kill节点,那么就被认为失败了并且报告在工作流定义中的message元素指定的错误消息。

这个工作流定义文件的大部分都是指定mapreduce动作。前两个元素(jobtrackernamenode)用于指定提交作业的jobtracker和输入输出数据的namenode(实际上是一个Hadoop文件系统的URI)。两者都被参数化,使得工作流定义不受限于特定的集群,更有利于测试。这些参数在提交时指定为工作流属性,我们稍后会看到。

可选项prepare元素在MapReduce作业之前运行并用于目录删除(在需要的时候也可以创建目录,但这里没有指明)。通过确保输出目录在运行作业 之前处于一致的状态,如果作业失败的话,那么Oozie也可以安全地重新执行动作。*

运行MapReduce作业是在configuration元素中设定的,通过为Hadoop配置的名值对来设置嵌套的元素。可以把MapReduce配置部分看作本书中其他地方运行MapReduce程序(如范例2-6所示)使用的驱动程序表的一个 替代。

有两个非标准的Hadoop属性mapred.input.dirmapred.output.dir,它们分别用于设置FilelnputFormat输入路径和FileOutputFormat输出路径。

 

我们在工作流的定义中的几个地方利用了JSPExpressionLanguage(EL)语法。Oozie提供了一组与工作流交互的函数。例如${wf:user()}返回开始当前工作流作业的用户名,我们用它来指定正确的文件系统路径Oozie规范中列出所有Oozie支持的EL函数。

2.打包和配置Oozie工作流应用

工作流应用由工作流定义和所有运行它所需的资源(例如MapReduce JAR文件、Pig脚本等)构成。应用必须遵循一个简单的目录结构,并在HDFS上配置,这样它们才能被Oozie访问。对于这个工作流应用,我们将所有的文件放到max-temp-workflow根目录中,如下所示:

maxtempworkflow/

!— lib/

|1——hadoopexamples.jar

1——workflow.xml

工作流定义文件workflow.xm丨必须在该目录的顶层出现。包含应用的MapReduce类的JAR文件放在lib目录中。

遵循这种布局的工作流应用能通过很多合适的工具创建,例如AntMaven,你可以在本书附带的代码中找到样例。一旦创建应用,就使用正规的Hadoop工具将它复制到HDFS。命令如下:

%hadoop fs -put hadoop-examples/target/max-temp-workflow max-temp-workflow

3.运行Oozie工作流作业

接下来,我们看看如何为刚刚上载的应用运行一个工作流作业。为此,使用oozie命令行工具,它是用于和Oozie服务器通信客户端程序。方便起见,我们输出〇〇ZIE_URL环境变量来告诉oozie命令使用哪个Oozie服务器(这里我们使用本地运行的服务器):

%export OOZIE_URL="http://localhost:11000/oozie"

oozie工具有很多子命令(输入ooziehelp可得到这些子命令的列表),但我们将调用带有-run选项的job子命令:

%oozie job -config ch05/src/main/resources/max-temp-workflow.properties

-run job: 0000009-120119174508294-oozie-tom-W

config选项设定本地Java属性文件,它包含工作流XML文件里的参数

 

的定义以及oozie.wf.application.path,这个路径告知OoziHDFS中工作流应用的位置。该属性文件的内容如下:

nameNode=hdfs://localhost:8020jobT racken=localhost:8021

oozie.wf.application.path=${nameNode}/user/${user.name}/max-temp-workflow

为了得到工作流作业的状态信息,我们使用info选项,指定由前面运行的命令打印的作业ID(输入ooziejob将得到所有作业的列表):

%oozie job -info 0000009-120119174508294-oozie-tom-W

输出显示如下状态:RUNNINGKILLED或者SUCCEDED。通过Oozie的网页UI(A:///oca//2〇从•"0/oozie),你也可以找到这些信息。

作业成功后,可以通过以下常用方法检査结果:

%hadoop fs -cat output/part-*

1949111

195022

这个例子只描述了Oozie工作流的基本写入。Oozie网站上的文档介绍了如何创建更复杂的工作流以及如何写和运行coordinator作业。

 

 

转载请注明:全栈大数据 » 5.7.3关于ApacheOozie

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址