MapReduce中combine、partition、shuffle的作用是什么
http://www.aboutyun.com/thread-8927-1-1.html Mapreduce在hadoop中是一個比較難以的概念。下面需要用心看,然后自己就能總結出來了。 概括:</span> combine和partition都是函數,中間的步驟應該只有shuffle! 1.combine combine分為map端和reduce端,作用是把同一個key的鍵值對合并在一起,可以自定義的。 combine函數把一個map函數產生的<key,value>對(多個key,value)合并成一個新的<key2,value2>.將新的<key2,value2>作為輸入到reduce函數中 這個value2亦可稱之為values,因為有多個。這個合并的目的是為了減少網絡傳輸。 具體實現是由Combine類。 實現combine函數,該類的主要功能是合并相同的key鍵,通過job.setCombinerClass()方法設置,默認為null,不合并中間結果。實現map函數 具體調用:(下圖是調用reduce,合并map的個數) 難點:不知道這個reduce和mapreduce中的reduce區別是什么?</span> 下面簡單說一下:后面慢慢琢磨: 在mapreduce中,map多,reduce少。 在reduce中由于數據量比較多,所以干脆,我們先把自己map里面的數據歸類,這樣到了reduce的時候就減輕了壓力。</span> 這里舉個例子: map與reduce的例子 map理解為銷售人員,reduce理解為銷售經理。 每個人(map)只管銷售,賺了多少錢銷售人員不統計,也就是說這個銷售人員沒有Combine,那么這個銷售經理就累垮了,因為每個人都沒有統計,它需要統計所有人員賣了多少件,賺錢了多少錢。</span> 這樣是不行的,所以銷售經理(reduce)為了減輕壓力,每個人(map)都必須統計自己賣了多少錢,賺了多少錢(</span>Combine),</span>然后經理所做的事情就是統計每個人統計之后的結果。這樣經理就輕松多了。所以Combine在map所做的事情,減輕了reduce的事情。 (這就是為什么說map的Combine干reduce的事情,相信你應該明白了)</span> |