Mapreduce 将Map Reduce与Oozie集成时出错

Mapreduce 将Map Reduce与Oozie集成时出错,mapreduce,oozie,Mapreduce,Oozie,当我尝试使用oozie在mapreduce中运行单词计数prg时。。它只是读取并显示输入记录。我猜它甚至没有调用我的mapper和reducer类。因为我使用的是新的API,所以在workflow.xml中也包含了新的API属性标记 映射减少代码段: public class WordCount { public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { priva

当我尝试使用oozie在mapreduce中运行单词计数prg时。。它只是读取并显示输入记录。我猜它甚至没有调用我的mapper和reducer类。因为我使用的是新的API,所以在workflow.xml中也包含了新的API属性标记

映射减少代码段:

public class WordCount {

  public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
     private final static IntWritable one = new IntWritable(1);
     private Text word = new Text();

     public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
         String line = value.toString();
         StringTokenizer tokenizer = new StringTokenizer(line);
         while (tokenizer.hasMoreTokens()) {
             word.set(tokenizer.nextToken());
             context.write(word, one);
         }
 }
公共类字数{
公共静态类映射扩展映射器{
私有最终静态IntWritable one=新的IntWritable(1);
私有文本字=新文本();
公共void映射(LongWritable键、文本值、上下文上下文)引发IOException、InterruptedException{
字符串行=value.toString();
StringTokenizer标记器=新的StringTokenizer(行);
while(tokenizer.hasMoreTokens()){
set(tokenizer.nextToken());
上下文。写(单词,一);
}
}
}

公共静态类Reduce扩展Reducer{
公共void reduce(文本键、Iterable值、上下文)
抛出IOException、InterruptedException{
整数和=0;
for(可写入值:值){
sum+=val.get();
}
write(key,newintwriteable(sum));
}
}

my workflow.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <workflow-app xmlns='uri:oozie:workflow:0.1' name="wordcount">
    <start to="wc-node" />
    <action name="wc-node">
    <map-reduce>
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <prepare>
            <delete path="${nameNode}/user/${wf:user()}/${wordcountRoot}/output-    data/${outputDir}"/>
        </prepare>

        <configuration>

            <property>
                <name>mapred.mapper.new-api</name>
                <value>true</value>
            </property>

            <property>
                <name>mapred.reducer.new-api</name>
                <value>true</value>
                 </property>

            <property>
                <name>mapreduce.map.class</name>
                <value>WordCount.Map</value>
            </property>

            <property>
                <name>mapreduce.reduce.class</name>
                <value>WordCount.Reduce</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.map.tasks</name>
                <value>1</value>
            </property>

            <property>
                <name>mapred.input.dir</name>
                <value>/user/${wf:user()}/${wordcountRoot}/input-data</value>
            </property>
            <property>
                <name>mapred.output.dir</name>
                <value>/user/${wf:user()}/${wordcountRoot}/output-data/${outputDir}</value>
            </property>

            <property>
                <name>mapred.job.queue.name</name>
                <value>${queueName}</value>
            </property>

            <property>
             <name>mapreduce.job.acl-view-job</name>
             <value>*</value>
            </property>

            <property>
               <name>oozie.launcher.mapreduce.job.acl-view-job</name>
               <value>*</value>
            </property>

         </configuration>

    </map-reduce>

    <ok to="end" />
    <error to="fail" />
</action>

<kill name="fail">
    <message>Map/Reduce failed</message>
</kill>
<end name="end" />

但还是没有运气。
如果有人遇到这个问题,请告诉我哪里出了问题

提前感谢。

问题已解决。。。 在使用新的mapreduce API时..我们需要在mapper和reducer类名前面加“$”符号:

<property>
 <name>mapreduce.map.class</name>
 <value>oozie.WordCount$Map</value>
</property> 
<property> 
 <name>mapreduce.reduce.class</name>
 <value>oozie.WordCount$Reduce</value>
</property>

mapreduce.map.class
oozie.WordCount$Map
mapreduce.reduce.class
oozie.WordCount$Reduce
<property>
 <name>mapreduce.map.class</name>
 <value>oozie.WordCount$Map</value>
</property> 
<property> 
 <name>mapreduce.reduce.class</name>
 <value>oozie.WordCount$Reduce</value>
</property>