Java MapReduce作业的Reducer中的奇怪行为

Java MapReduce作业的Reducer中的奇怪行为,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,下面是我在MapReduce作业中使用的Reducer函数的代码。 它应该返回附加到每个值的迭代器+自定义字符串(“*--”)中的值。 但是,它会两次附加自定义字符串 例如,如果值为abc,则 而不是印刷 abc***--- 它正在印刷 abc***---***--- 为什么会这样 守则: public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, Text> {

下面是我在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); 

        }

    }

}
公共静态类Reduce扩展MapReduceBase实现Reducer{
公共void reduce(文本键、迭代器值、OutputCollector输出、Reporter报告器)引发IOException{
while(values.hasNext()){
Text t=值。next();
字符串s=“***--”;
t、 追加(s.getBytes(),0,s.length());
输出。收集(键,t);
}
}
}

您是否也将减速器类用作组合器?如果是这样,减速机中的操作将应用两次:一次在合并阶段(映射之后,洗牌/排序之前),另一次在减速机阶段。

您的答案很可能是正确的,但还有一些额外的细节:Hadoop实际上并不保证合并器运行,或者它只运行一次,通常可能执行0-N次。是。事情就是这样。我也使用了相同的类组合器。删除了该代码,现在代码运行良好。无论如何,谢谢!:)