【发布时间】:2018-04-22 15:34:20
【问题描述】:
我调整了标准字数统计 Hadoop 示例,以使用用户定义的计数器计算一系列输入文本文件中的所有唯一单词,并在驱动程序类中定义一个枚举,如下所示:
public enum Operations { UNIQUE_WC }
我在Reducer中的代码如下:
public class WordCountReducer extends Reducer <Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
context.getCounter(WordCountJobControl.Operations.UNIQUE_WC).increment(1);
}
}
当Reducer 类被设置为Combiner 时,这会导致奇怪的行为。计数器不接收 Reduce Input Groups/Reduce Output Records 的值,而是接收 Reduce Input Groups 和 Reduce Input Records 的总和,即唯一词加总词,或键加值。
谁能帮我理解为什么会发生这种情况背后的逻辑?据我了解(可能是错误的),如果有任何事情减少了给定的数量,那么这样做应该。
【问题讨论】:
-
我发现问题是由我将 WordCountReducer 类设置为 Combiner 和 Reducer 引起的。我仍然不明白为什么它会产生这种效果。我正在改写这个问题来专门问这个问题。