文章來源http://blog.csdn.net/ipolaris/article/details/8723782
reduce的輸入每個key所對應的value將是一大串1,但處理的文本很多時,這一串1已將占用很大的帶寬,如果我們在map的輸出給於reduce之前做一下合並或計算,那么傳給reduce的數據就會少很多,減輕了網絡壓力。此時Combiner就排上用場了。我們現在本地把Map的輸出做一個合並計算,把具有相同key的1做一個計算,然后再把此輸出作為reduce的輸入,這樣傳給reduce的數據就少了很多。Combiner是用reducer來定義的,多數的情況下Combiner和reduce處理的是同一種邏輯,所以job.setCombinerClass()的參數可以直接使用定義的reduce,當然也可以單獨去定義一個有別於reduce的Combiner,繼承Reducer,寫法基本上定義reduce一樣。讓我們看一下,加入Combiner之前的處理結果