首頁技術文章正文

Shuffle的工作機制是什么?

更新時間:2021-07-20 來源:黑馬程序員 瀏覽量:

IT培訓班

map階段處理的數據如何傳遞給reduce階段,是MapReduce框架中關鍵的一個流程,這個流程就叫shuffle。
shuffle: 洗牌、發(fā)牌--(核心機制:數據分區(qū),排序,合并)。

shuffle是Mapreduce的核心,它分布在Mapreduce的map階段和reduce階段。一般把從Map產生輸出開始到Reduce取得數據作為輸入之前的過程稱作shuffle。

1.Collect階段:將MapTask的結果輸出到默認大小為100M的環(huán)形緩沖區(qū),保存的是key/value,Partition分區(qū)信息等。

2.Spill階段:當內存中的數據量達到一定的閥值的時候,就會將數據寫入本地磁盤,在將數據寫入磁盤之前需要對數據進行一次排序的操作,如果配置了combiner,還會將有相同分區(qū)號和key的數據進行排序。

3.Merge階段:把所有溢出的臨時文件進行一次合并操作,以確保一個MapTask終只產生一個中間數據文件。

4.Copy階段: ReduceTask啟動Fetcher線程到已經完成MapTask的節(jié)點上復制一份屬于自己的數據,這些數據默認會保存在內存的緩沖區(qū)中,當內存的緩沖區(qū)達到一定的閥值的時候,就會將數據寫到磁盤之上。

5.0Merge階段:在ReduceTask遠程復制數據的同時,會在后臺開啟兩個線程對內存到本地的數據文件進行合并操作。

6.Sort階段:在對數據進行合并的同時,會進行排序操作,由于MapTask階段已經對數據進行了局部的排序,ReduceTask只需保證Copy的數據的 終整體有效性即可。

Shuffle中的緩沖區(qū)大小會影響到mapreduce程序的執(zhí)行效率,原則上說,緩沖區(qū)越大,磁盤io的次數越少,執(zhí)行速度就越快。緩沖區(qū)的大小可以通過參數調整, 參數:io.sort.mb 默認100M







猜你喜歡:

MapReduce編程開發(fā)實例——詞頻統(tǒng)計過程

詳解MapReduce編程的Map模型和Reduce模型

黑馬程序員python+大數據開發(fā)培訓

分享到:
在線咨詢 我要報名
和我們在線交談!