背景:
此处介绍oozie简单执行一个MR任务的基本流程,采用的是官网的Example进行测试,job.properties文件是自己手动配置的,jar包 和 workflow.xml 用Example自带的配置!由于自己配置稍微有些麻烦,后面的介绍我会基于 Hue进行可视化配置~
oozie server version:4.1.0 - CDH5.13.0
在Linux下创建测试目录:
mkdir -p /home/yj/oozie-test
下载官网oozie压缩包(版本和环境不一致也行,我们只是用其中的Example):
cd /home/yj/oozie-test
wget http://apache.fayea.com/oozie/4.3.1/oozie-4.3.1.tar.gz
解压后,将example目录移到自己的测试目录:
tar -xvf oozie-4.3.1.tar.gz
cd oozie-4.3.1
mv examples/ ../oozie-examples
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<version>2.5version>
<configuration>
<skipTests>falseskipTests>
<testFailureIgnore>truetestFailureIgnore>
<forkMode>onceforkMode>
configuration>
plugin>
mvn package
跳转到本次测试的example目录下,可以看到oozie运行的几个关键文件:
cd /home/yj/oozie-test/oozie-examples/src/main/apps/map-reduce
nameNode=hdfs://cdh1:8020
jobTracker=cdh1:8032
queueName=default
examplesRoot=examples
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce
outputDir=map-reduce
注:nameNode 和 jobTracker(ResourceManager) 的 路径端口需要和自己集群环境对应,我的CDH集群端口是这个,但开源的集群就和这不同了!
我们可以浏览下workflow.xml文件,这是任务运行最关键的文件:
<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">
<start to="mr-node"/>
<action name="mr-node">
<map-reduce>
<job-tracker>${jobTracker}job-tracker>
<name-node>${nameNode}name-node>
<prepare>
<delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}"/>
prepare>
<configuration>
<property>
<name>mapred.job.queue.namename>
<value>${queueName}value>
property>
<property>
<name>mapred.mapper.classname>
<value>org.apache.oozie.example.SampleMappervalue>
property>
<property>
<name>mapred.reducer.classname>
<value>org.apache.oozie.example.SampleReducervalue>
property>
<property>
<name>mapred.map.tasksname>
<value>1value>
property>
<property>
<name>mapred.input.dirname>
<value>/user/${wf:user()}/${examplesRoot}/input-data/textvalue>
property>
<property>
<name>mapred.output.dirname>
<value>/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}value>
property>
configuration>
map-reduce>
<ok to="end"/>
<error to="fail"/>
action>
<kill name="fail">
<message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]message>
kill>
<end name="end"/>
workflow-app>
再将这些文件上传到hdfs:
hdfs dfs -mkdir -p /user/root/examples/apps/map-reduce
hdfs dfs -put /home/yj/oozie-test/oozie-examples/src/main/apps/map-reduce/workflow.xml /user/root/examples/apps/map-reduce/
hdfs dfs -put /home/yj/oozie-test/oozie-examples/target/oozie-examples-4.3.1.jar /user/root/examples/apps/map-reduce/lib
hdfs dfs -mkdir /examples
hdfs dfs -put /home/yj/oozie-test/oozie-examples/src/main/apps /examples
注意hdfs文件权限问题!需要确保执行oozie任务的用户具备hdfs 读权限!
建立输入输出文件夹并上传测试数据,workflow.xml中已经配置了该路径:
hdfs dfs -mkdir -p /user/root/examples/input-data/text
hdfs dfs -mkdir -p /user/root/examples/output-data
hdfs dfs -put /home/yj/oozie-test/oozie-examples/src/main/data/data.txt /user/root/examples/input-data/text
linux下执行:
oozie job -oozie http://cdh1:11000/oozie -config \
/home/yj/oozie-test/oozie-examples/src/main/apps/map-reduce/job.properties -run
执行成功控制台会提示:job: 0000000-180808134936263-oozie-oozi-W
我们可以看到启动oozie-job时只是指定了 job.properties 文件,该文件又指定了应用路径oozie.wf.application.path
,通过这个路径寻找到map-reduce目录,自动根据该目录下的lib目录 和 workflow.xml去启动 oozie-launcher mrjob !
我们可以去oozie web控制台看这些oozie job: