2013-10-08 21 views
0

我用組合器運行WordCount的例子。 這裏的運行結果:爲什麼Hadoop中的reduce_input_records小於combine_output_records?

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的數字不應該是最後一次調用的結果嗎?爲什麼它不等於減速器消耗的記錄數量?

感謝您的幫助!

回答

0

組合器並不總是被調用,你實際上無法控制它是否被調用(或多少次),這是框架決定的。這可能解釋了數字。這似乎組合雖然做了了不起的工作:

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