gpt4 book ai didi

java - MAP_OUTPUT_RECORDS 值在 reducer 类中不断变化

转载 作者:可可西里 更新时间:2023-11-01 16:08:06 26 4
gpt4 key购买 nike

我正在尝试使用 reducer 类中的 MAP_OUTPUT_RECORDS 计数器来计算示例 wordcount 程序中的单词百分比。

这里是 reducer 中 setup() 方法的代码:

public static class IntSumReducer extends  
Reducer<Text,FloatWritable,Text,FloatWritable> {
private FloatWritable result = new FloatWritable();
private long total = 0;

@Override
public void setup(Context context) throws IOException , InterruptedException{
total = context.getCounter("org.apache.hadoop.mapred.Task$Counter", "MAP_OUTPUT_RECORDS").getValue();
System.out.println("total : " + total);
}

这是最后一行打印语句的输出:

总计:1131
总计:487
总计:421
总计:333
总计:101
总计:101
总计:l95
总计:l85
总计:0

我不明白:

  1. 为什么多次调用 setup() 方法?根据定义,它应该只在任务开始时被调用一次。
  2. 为什么“MAP_OUTPUT_RECORDS”的值不断变化?它不应该是一个独特的值(value)吗? (所有映射器的总输出加起来)?

我认为 reducer 不会在所有映射器完成执行之前启动。为什么“MAP_OUTPUT_RECORDS”值不是常量?

最佳答案

“任何reduce函数调用都应该在所有映射器完成之后他们的工作”。

只有在显式关闭推测执行时才严格为真。否则,某些 reduce 任务有可能在所有映射完成之前实际开始。

为此,请检查链接,

http://mail-archives.apache.org/mod_mbox/hadoop-common-user/201002.mbox/%3C5f6b7e1002011502u774934f9x5800590f264a933a@mail.gmail.com%3E

1) 关于 setup() 方法调用,可能会为您的作业启动多个 reducer,并且对于每个 reducer,都会调用 setup 方法。请检查,

setup and cleanup methods of Mapper/Reducer in Hadoop MapReduce

2) MAP_OUTPUT_RECORDS 不断变化,因为根据 Hadoop 权威指南,

MAP_OUTPUT_RECORDS:"作业中所有 map 生成的 map 输出记录数。每次在 map 的 OutputCollector 上调用 collect() 方法时递增。

映射器可能正在运行,同时调用了 reducer 的 setup() 方法,因此每次调用都会更改 MAP_OUTPUT_RECORDS。

希望这个回答对您有所帮助。

关于java - MAP_OUTPUT_RECORDS 值在 reducer 类中不断变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34173039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com