題記
本文資料來源于拉鉤大數據開發(fā)高薪訓練營。
shuffle機制在MapReduce整個過程中非常重要,試想如果沒有shuffle機制,以wordCount為例,相同的key就沒法落在同一個數據分區(qū)中,自然不能被同一個ReduceTask處理。
shuffle核心機制: 數據分區(qū),排序,分組,combine,合并等。

shuffle
- 從map完成開始,shuffle階段正式開始。首先map階段的數據都會先進入一個緩沖區(qū),緩沖區(qū)的默認大小是100M,當緩沖區(qū)的數據達到80%,就會將這80%的數據溢寫到磁盤中作為一個分區(qū)文件,剩下的20%空間繼續(xù)做緩存的工作。
- 溢寫到磁盤中的數據分區(qū)會進行一個Sort,Sort是hadoop默認的機制,這里不深入討論。
- 排好序的分區(qū)會合并、然后再進行總體歸并排序,由多個分區(qū)文件變?yōu)橐粋€文件的過程,其目的是減少網絡IO的傳輸。
- 然后再Reduce之前,MapTask會將數據輸出到Reduce的節(jié)點上。這其中是由ReduceTask向MapTask發(fā)起HTTP請求,ReduceTask會請求屬于自己的數據,這其中是Partitioner起了作用,Partitioner會篩選key到分區(qū),以此將MapTask的滿足同一個篩選條件的數據拉取到ReduceTask的節(jié)點上,進行Reduce工作。
- ReduceTask接收到數據后,也是會先放到內存緩存中,當內存緩存不夠也是將數據溢出到磁盤中,接下來類似地將數據進行歸并排序,最后按照相同的key進行分組。如果只有一種key,那就是分一個組,如果有多個key,則是在一個文件中,相同的key的數據分開放。
- 分組后,shuffle階段就結束了,接下來就是執(zhí)行Reduce方法了。