天天看點

mapreduce的shuffle機制(來自學習筆記)3. MAPREDUCE原理篇(2)

v  mapreduce中,map階段處理的資料如何傳遞給reduce階段,是mapreduce架構中最關鍵的一個流程,這個流程就叫shuffle;

v shuffle: 洗牌、發牌——(核心機制:資料分區,排序,緩存)

v 具體來說:就是将maptask輸出的處理結果資料,分發給reducetask,并在分發的過程中,對資料按key進行了分區和排序;

shuffle緩存流程:

mapreduce的shuffle機制(來自學習筆記)3. MAPREDUCE原理篇(2)

shuffle是mr處理流程中的一個過程,它的每一個處理步驟是分散在各個map task和reduce task節點上完成的,整體來看,分為3個操作:

1、分區partition

2、sort根據key排序

3、combiner進行局部value的合并

1、 maptask收集我們的map()方法輸出的kv對,放到記憶體緩沖區中

2、 從記憶體緩沖區不斷溢出本地磁盤檔案,可能會溢出多個檔案

3、 多個溢出檔案會被合并成大的溢出檔案

4、 在溢出過程中,及合并的過程中,都要調用partitoner進行分組和針對key進行排序

5、 reducetask根據自己的分區号,去各個maptask機器上取相應的結果分區資料

6、 reducetask會取到同一個分區的來自不同maptask的結果檔案,reducetask會将這些檔案再進行合并(歸并排序)

7、 合并成大檔案後,shuffle的過程也就結束了,後面進入reducetask的邏輯運算過程(從檔案中取出一個一個的鍵值對group,調用使用者自定義的reduce()方法)

shuffle中的緩沖區大小會影響到mapreduce程式的執行效率,原則上說,緩沖區越大,磁盤io的次數越少,執行速度就越快

緩沖區的大小可以通過參數調整,  參數:io.sort.mb  預設100m

mapreduce的shuffle機制(來自學習筆記)3. MAPREDUCE原理篇(2)

繼續閱讀