开发者学堂课程【Oozie 知识精讲与实战演练:Apache Oozie-- 实战操作--调度 mapreduce 程序】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/716/detail/12789
Apache Oozie-- 实战操作--调度 mapreduce 程序
内容介绍
一、Oozie 调度 MapReduce
一、Oozie 调度 MapReduce
1、准备配置模板
准备 mr 程序的架包和待处理数据。用 hadoop 自带的MR程序做 wordcount 统计。
准备数据上传到 HDFS 的 /oozie/input 路径下去
创建代处理的数据路径 hdfs dfs -mkdir -p /oozie/input
准备文件:hdfs dfs -put wordcount.txt /oozie/input,写一些简单的单词,保存好后把这个文件上传到刚才创建的文件夹下面,复制并执行,这样就完成了 mr 待处理的数据。
拷贝 MR 的任务模板到工作路径下
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra examples/apps/map-reduce/ oozie_works/ 把这个文件夹完整的 copy 到工作目录当中
具有相关的配置信息
删掉 MR 任务模板lib目录下自带的iar包,可以看到在当中有个lib 文件夹,cd到 lib 当中可以发现有一个 oozie 自带的 mr 程序,直接把他删除,删除后 mr 调度的程序需要自己去打包上传。
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/map-
reduce/lib
rm -rf oozie-examples-4.1.0-cdh5.14.0.jar
以拷贝官方自带 mr 程序 jar 包到对应目录
cp
/export/servers/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar,
官方安装包下有 share 路径
/export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/map reduce/lib/
将以上代码进行复制,做格式调整,复制后查看发现多了一个 hadoop-mapreduce-examp1es-2.7.5.jar,这个程序就是官方再带的,在企业当中如果需要去调度执行其他 mr 程序,必须首先保证 mr 程序逻辑没有问题,把它打成架包放在这个路径下就可以了。
2.修改配置模板
修改 job.properties,里面只需要去指导 hoodp 相关属性以及 workfold 工作路径。
进行远程修改相关的编辑,选择 workfold 文件夹做刷新,首先修改 job.properties
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/map-
reduce
vim job.properties
修改为以下代码
nameNode=hdfs://node-1:9000
nameNode=hdfs://node-1:8020
jobTracker=node-1:8032
queueName=default
examplesRoot=oozie works
ooziewfapplicationpath=${nameNode}/user/${username}/${examplesRoot}/map reduce/workflow.xml
outputDir=/oozie/output(参数)
inputdir=/oozie/input
按照以上代码进行修改,这样就完成了 job.properties 的配置文件编写。
3.修改 workflow.xml
双击 workflow.xml 打开,核对以下代码操作
cd/export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/map- reduce
vim workflow.xml
执行 mr 程序
${jobTracker}
${nameNode}
(预操作删除输出路径)
删除输出的路径,通过对 mr 的学习了解 mr 程序在执行的时候如果输出路径存在,直接报输出路径已经存在的异常,所以这里做了检测,不管数据有没有先把它给删除,来保证后面执行成功。
mapred.job.queue.name
${queueName}
需要强调,因为是老版的 api,所以需要把上面注释掉,输入新的 api 进行相关配置。
具体操作:
把 ${nameNode}/${outputDir}"/> 路径进行复制,就会检测输出路径,如果有的话就会把他删除
将以上-->到-->进行注释,这样相当于把老版本 api 注释掉
mapredmapper.new-api
true
mapred.reducer.new-api
true
mapreduce.job.output.value.class
org.apache.hadoop.io.IntWritable
mapred.input.dir
数据路径所在,
${nameNode}/${inputdir}
通过这个变量就可以获取到 inputdir 路径。
mapred.output.dir
${nameNode}/${outputDir}
(就是 mr 程序当中指定的全路径,一定要保持一致,和代码符合)mapreduce.job.map.class
org.apache.hadoop.examples.WordCountSTokenizerMapper
(数据比较多就多配置,少就不配置)mapreduce.job.reduce.class
org.apache.hadoop.examples.WordCountSIntSumReducer
mapred.map.tasks
将以上代码进行复制,就完成了整体的配置,格式做调整,这样就完成了 hdoop 的配置,放在 new 1- Notepad++ 来操作就不会出现格式问题,或者进行下载再上传,都比编辑器直接编辑错误率少很多。
Map/Reduce failed, error
message[${wf:errorMessage(wf:lastErrorNode())}]
4、上传调度任务到hdfs
cd /exp
ort/servers/oozie-4.1.0-cdh5.14.0/oozie_works
hdfs dfs -put map-reduce/ /user/root/oozie_works/
直接复制,上传后可以进行验证一下,这里面就有相关配置的参数
5、使用官方的执行调度任务
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie job -oozie http://node-1:11000/oozie -config
oozie_works/map-reduce/job.properties -run
复制以上命令,进行修改格式,提交时已经报错,缺少参数,检查复制代码问题
提交完成后就可以看到执行的过程了,yarn 执行的结果如下图,会发现 mr 程序已经结束了
通过 oozie 来查看,已经结束,也是成功的。
输出结果:若相同就代表正确。
二、总结
1.oozie 调度 mapreduce 程序需要在 workflow.xml 中开启使用新版的 api hadoop2.x