MapReduce作业的Reducer中的奇怪行为

时间:2013-01-10 10:13:07

标签: java hadoop mapreduce

以下是我在MapReduce作业中使用的Reducer函数的代码。 它应该将迭代器+自定义字符串(“ * ---”)的值返回到每个值。 但它改为两次附加自定义字符串。

例如,如果值为abc则 而不是打印

abc***---

正在打印

abc***---***---

为什么会这样?

代码:

public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, Text> {

    public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {

        while (values.hasNext()) {

            Text t=values.next();
            String s = "***---";

            t.append(s.getBytes(), 0, s.length());

            output.collect(key, t); 

        }

    }

}

1 个答案:

答案 0 :(得分:3)

您是否也将{Reducer]类用作Combiner?如果是这样,Reducer中的操作将被应用两次:一次是在Combine阶段(Map之后,shuffle / sort之前),再次是在Reduce阶段。