【问题标题】:hadoop reduce function is not excuted?hadoop reduce函数没有执行?
【发布时间】:2012-06-09 06:32:31
【问题描述】:

我正在运行mapreduce程序,但我意识到虽然我写了一个reduce函数,但mapreduce并没有执行它。然后我尝试添加@Override,错误说reduce函数没有覆盖任何超级方法。

作业配置信息如下

        preProcess.setJobName("GeneProcessing program for 100 SNP");

        preProcess.setMapperClass(PreprocessMapper.class);
        preProcess.setReducerClass(PreprocessReducer.class);

        preProcess.setInputFormatClass(TextInputFormat.class);
        //setInputFormat(TextInputFormat.class);
    preProcess.setOutputFormatClass(TextOutputFormat.class);


    preProcess.setMapOutputKeyClass(Text.class);
    preProcess.setMapOutputValueClass(Text.class);  

        preProcess.setOutputKeyClass(NullWritable.class);
    preProcess.setOutputValueClass(Text.class);

    //preProcess.setNumMapTasks(4);
    preProcess.setNumReduceTasks(4);
    FileInputFormat.setInputPaths(preProcess, preprocessInputPath);
    FileOutputFormat.setOutputPath(preProcess, preprocessOutputPath);
    //JobClient.runJob(preProcess);
        preProcess.waitForCompletion(true);

减少代码如下

import java.io.*;
import java.util.*;


import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Reducer;
    public class PreprocessReducer extends Reducer<Text, Text, NullWritable, Text> 
    {
        public Text newKey = new Text("");

            //no enter the reduce task
            @Override
        protected void reduce(Text key, Iterator<Text> values, Context output)                 
             throws IOException, InterruptedException                
            {

            do something here

        }

    }

【问题讨论】:

    标签: hadoop reducers


    【解决方案1】:

    您对 reduce 方法的签名错误 - 第二个参数应该是 Iterable&lt;Text&gt; 而不是 Iterator&lt;Text&gt;

    @Override
    protected void reduce(Text arg0, Iterable<Text> arg1,
             Context arg2)
             throws IOException, InterruptedException {
    
    }
    

    您使用的是什么 IDE? Eclipse 有一个 Source -> Override / Implement 方法菜单选项,这使得签名正确更容易。我确信 Netbeans 也有类似的功能。

    【讨论】:

    • 我在mac中使用netbean,之前使用mapred包的代码,我想改成mapreduce包,但是奇怪的是netbean没有给我更正。
    • @Chris White,我面临同样的问题,我使用 Iterable 作为第二个参数,但我的 reduce 函数仍然没有调用。请查看我的程序here
    猜你喜欢
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多