MR -- Shuffle機制

1、流程詳解
Map 方法之後,Reduce 方法之前的數據處理過程被稱爲 Shuffle,具體流程爲:
(1) MapTask 收集 map() 方法輸出的 kv 對,放到內存緩衝區中。
(2) 從內存緩衝區不斷溢出本地磁盤文件,可能會溢出多個文件。
(3) 多個溢出文件會被合併成大的溢出文件。
(4) 在溢出過程及合併的過程中,都要調用 Partitioner 進行分區和針對 key 進行排序。
(5) ReduceTask 根據自己的分區號,去各個 MapTask 機器上取相應的結果分區數據。
(6) ReduceTask 會取到同一個分區的來自不同 MapTask 的結果文件,ReduceTask 會將這些文件再進行合併(歸併排序)。
(7) 合併成大文件後,Shuffle 的過程也就結束了,後面進入 ReduceTask 的邏輯運算過程(從文件中取出一個一個的鍵值對 Group,調用用戶自定義的 reduce() 方法)。

2、注意點
Shuffle 中的緩衝區大小會影響到 MapReduce 程序的執行效率,原則上說,緩衝區越大,磁盤 io 的次數越少,執行速度就越快。緩衝區的大小可以通過參數調整,參數:io.sort.mb 默認100M。

3、Shuffle 圖示
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章