4.3 案例三: Oozie 调度 MapReduce 任务

目标:使用Oozie调度MapReduce任务

步骤1: 找到一个可以运行的 mapreduce 任务的 jar 包

可以使用 Hadoop 提供的案例, 也可以自己写.

我们以前面用到过的wordcount

步骤2: 测试一下 wordcount 在 yarn 中的运行

需要记录下来用到的几个类, 在工作流的配置中使用到:

在 oozie 的根目录下创建一个目录inputs, 随便创建一个文件, 随便写入写内容, 用来统计内容的中单词出现的频率.

mkdir inputs

测试 wordcount:

/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/hadoop fs -put inputs /inputs

/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/module/cdh/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /inputs /output

步骤3: 拷贝官方模板到oozie-apps目录

cp -r examples/apps/map-reduce oozie-apps

步骤4: 配置 MapReduce 任务的job.properties

nameNode=hdfs://hadoop201:8000
jobTracker=hadoop202:8032
queueName=default
mrRoot=oozie-apps

oozie.wf.application.path=${nameNode}/user/${user.name}/${mrRoot}/map-reduce/workflow.xml
outputDir=map-reduce

步骤5: 配置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.name</name>
                    <value>${queueName}</value>
                </property>
                <!-- 指定Mapper 和 Reducer 都使用新 API -->
                <property>
                    <name>mapred.mapper.new-api</name>
                    <value>true</value>
                </property>
                <property>
                    <name>mapred.reducer.new-api</name>
                    <value>true</value>
                </property>
                <!-- 指定Mapper 类 -->
                <property>
                    <name>mapreduce.job.map.class</name>
                    <value>org.apache.hadoop.examples.WordCount$TokenizerMapper</value>
                </property>
                <!-- 指定Reducer 类 -->
                <property>
                    <name>mapreduce.job.reduce.class</name>
                    <value>org.apache.hadoop.examples.WordCount$IntSumReducer</value>
                </property>
                <!-- 指定Job Key输出类型 -->
                <property>
                    <name>mapreduce.job.output.key.class</name>
                    <value>org.apache.hadoop.io.Text</value>
                </property>

                <!-- 指定Job Value输出类型 -->
                <property>
                    <name>mapreduce.job.output.value.class</name>
                    <value>org.apache.hadoop.io.IntWritable</value>
                </property>

                <property>
                    <name>mapred.map.tasks</name>
                    <value>1</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>/inputs</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>/output</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>

步骤6: 待执行的官方案例的 jar 包 copy 到任务的 lib 目录下

# 删除原来的 oozie 的官方案例jar
rm lib/oozie-examples-4.0.0-cdh5.3.6.jar
cp /opt/module/cdh/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar lib/

步骤7: 上传配置好的 app 文件夹到 HDFS

/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put oozie-apps/map-reduce/ /user/atguigu/oozie-apps

步骤8: 执行任务

bin/oozie job -oozie http://hadoop201:11000/oozie -config oozie-apps/map-reduce/job.properties -run
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-03-28 11:17:42

results matching ""

    No results matching ""