java - MapReduce 作业的Reducer 中的奇怪行为

标签 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); 

        }

    }

}

最佳答案

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

关于java - MapReduce 作业的Reducer 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14255410/

相关文章:

Java Swing 图形用户界面。在按住鼠标按钮的同时激活/触发更多按钮

performance - 调整使用底层 HBase 表的 Hive 查询

java - 在 Kotlin 中同时扩展和实现

java - 一次性加载配置属性的设计模式?

java - 连接被拒绝:无法连接到ResourceManager:8032

java - 在 MapReduce 中处理用户输入字符串

hadoop - Hadoop-MapReduce集群中此数据存储库的大小不断增加

hadoop - 建议多少个映射器和精简器在Hadoop中处理2TB数据?

hadoop - MapReduce 现实生活中的用途

java - Stream.findAny 是短路操作吗?