我使用组合器运行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_records
比combine_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/