hadoop - 为什么在Hadoop中reduce_input_records少于Combine_output_records?

标签 hadoop mapreduce combiners

我使用组合器运行WordCount示例。
运行结果如下:

13/10/07 22:32:38 INFO mapred.JobClient:     Map input records=20111076
13/10/07 22:32:38 INFO mapred.JobClient:     Reduce shuffle bytes=467280
13/10/07 22:32:38 INFO mapred.JobClient:     Spilled Records=541137
13/10/07 22:32:38 INFO mapred.JobClient:     Map output bytes=632287974
13/10/07 22:32:38 INFO mapred.JobClient:     Total committed heap usage (bytes)=4605870080
13/10/07 22:32:38 INFO mapred.JobClient:     Combine input records=62004735
13/10/07 22:32:38 INFO mapred.JobClient:     SPLIT_RAW_BYTES=2280
13/10/07 22:32:38 INFO mapred.JobClient:     Reduce input records=32020
13/10/07 22:32:38 INFO mapred.JobClient:     Reduce input groups=1601
13/10/07 22:32:38 INFO mapred.JobClient:     Combine output records=414658
13/10/07 22:32:38 INFO mapred.JobClient:     Reduce output records=1601
13/10/07 22:32:38 INFO mapred.JobClient:     Map output records=61622097

我有两个问题,为什么map_output_records小于combine_input_records
为什么reduce_input_recordscombine_output_records小得多?
我知道合并器可能会被调用多次,但是combine_output_records的数字难道不是最后一次调用的结果吗?为什么它不等于 reducer 消耗的记录数?

谢谢你的帮助!

最佳答案

合并器并不总是被调用,实际上您无法控制它是否被调用(或调用了多少次),这由框架决定。这可能解释了数字。看起来合并器做得很好:

Map output records=61622097    ->  Reduce input records=32020

关于hadoop - 为什么在Hadoop中reduce_input_records少于Combine_output_records?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255185/

相关文章:

hadoop - Spark SQL(1.1.0版本)是否支持hive索引?

java - 为什么作业链在 MapReduce 中不起作用?

hadoop - 使用 ChainReducer 抛出异常添加多个 Reducer

java - scala mapreduce 异常 : java. lang.ClassNotFoundException : scala. Function2

hadoop - Mapreduce 作业 ipc.Client 重试连接

Python 数据帧 : replace or combine selected values into main DataFrame

scala - 将键/值对列表转换为 spark 中每个键的值列表

r - 有 3 个相同维度的矩阵 - 我想获得三个不同矩阵的每个单元格的最高值

maven - 无法使用 mvn 编译 elephant-bird

java - 在Hadoop/层叠中从FTP服务器读取数据