shuffle: 是描述着數據從map端傳輸到reduce端的過程,並且咱們知道的是hadoop的集羣環境中,大部分map task和reduce task是在不一樣的node上執行,主要的開銷是網絡開銷和磁盤IO開銷,所以shuffle的主要做用至關因而 1.完整的從map task端傳輸到reduce task端。 2.跨節點傳輸數據時,儘量減小對帶寬的消耗.(注意是reduce執行的時候去拉取map端的結果) 3.減小磁盤IO開銷對task的影響。 shuffle的詳細:http://webcache.googleusercontent.com/search?q=cache:MP_qIMfp1N4J:langyu.iteye.com/blog/992916+mapreduce+shuffle+partition%E4%BD%9C%E7%94%A8&cd=1&hl=zh-CN&ct=clnk&gl=cn Partition: Partition主要做用就是將map的結果發送到相應的reduce。這就對partition有兩個要求: 1)均衡負載,儘可能的將工做均勻的分配給不一樣的reduce。 2)效率,分配速度必定要快。 重定向mapper的輸出,根據key來決定mapper應該講k,v對輸出給誰,默認採用的hash key來實現,也能夠根據本身的須要來實現。 partition的更多參考:http://blog.oddfoo.net/2011/04/17/mapreduce-partition%E5%88%86%E6%9E%90-2/ combiner: 至關於本地的reduce,在分發mapper的結果以前作一下本地的reduce,好比說wordcount程序,單詞「a」出現了500次,存儲並洗牌一次(「a」,500)鍵值對比許屢次(「a」,1)要高效。