shuffle是處在map和reduce之間的過程。我們看一下這個過程都有哪些步驟,對這個問題了解的並不深,可能有錯誤,忘指正
1. map
map輸出key,value,對應代碼裏的context.write(key, value);,這個步驟是將key,value寫到內存buffer裏了,這個內存的默認大小是100M
2. sort
當數據大小超過buffer容量的80%(默認)時,會將這部分數據進行排序,按照partition和key值進行排序,partition代表的是會分到哪個reducer裏
3. 溢寫
排好序之後將數據寫到磁盤上
4. merge
因爲很多時候不是一次溢寫就可以了,可能會經過多次溢寫,所以會在磁盤上產生多個文件,這個時候就需要將文件進行合併。
5. copy
通過http的方式將上一個步驟中的磁盤上的數據copy到對應的reduce端
6. mergesort
每個map的輸出端的文件時按照key排好序的,這個地方是對多個map端的文件按照key進行排序,邊merge邊sort
7. reduce
更詳細的內容見這篇博文
http://blog.csdn.net/nwpuwyk/article/details/37904657