首頁(yè)技術(shù)文章正文

Shuffle的工作機(jī)制是什么?

更新時(shí)間:2021-07-20 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

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

shuffle是Mapreduce的核心,它分布在Mapreduce的map階段和reduce階段。一般把從Map產(chǎn)生輸出開(kāi)始到Reduce取得數(shù)據(jù)作為輸入之前的過(guò)程稱作shuffle。

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

2.Spill階段:當(dāng)內(nèi)存中的數(shù)據(jù)量達(dá)到一定的閥值的時(shí)候,就會(huì)將數(shù)據(jù)寫(xiě)入本地磁盤(pán),在將數(shù)據(jù)寫(xiě)入磁盤(pán)之前需要對(duì)數(shù)據(jù)進(jìn)行一次排序的操作,如果配置了combiner,還會(huì)將有相同分區(qū)號(hào)和key的數(shù)據(jù)進(jìn)行排序。

3.Merge階段:把所有溢出的臨時(shí)文件進(jìn)行一次合并操作,以確保一個(gè)MapTask終只產(chǎn)生一個(gè)中間數(shù)據(jù)文件。

4.Copy階段: ReduceTask啟動(dòng)Fetcher線程到已經(jīng)完成MapTask的節(jié)點(diǎn)上復(fù)制一份屬于自己的數(shù)據(jù),這些數(shù)據(jù)默認(rèn)會(huì)保存在內(nèi)存的緩沖區(qū)中,當(dāng)內(nèi)存的緩沖區(qū)達(dá)到一定的閥值的時(shí)候,就會(huì)將數(shù)據(jù)寫(xiě)到磁盤(pán)之上。

5.0Merge階段:在ReduceTask遠(yuǎn)程復(fù)制數(shù)據(jù)的同時(shí),會(huì)在后臺(tái)開(kāi)啟兩個(gè)線程對(duì)內(nèi)存到本地的數(shù)據(jù)文件進(jìn)行合并操作。

6.Sort階段:在對(duì)數(shù)據(jù)進(jìn)行合并的同時(shí),會(huì)進(jìn)行排序操作,由于MapTask階段已經(jīng)對(duì)數(shù)據(jù)進(jìn)行了局部的排序,ReduceTask只需保證Copy的數(shù)據(jù)的 終整體有效性即可。

Shuffle中的緩沖區(qū)大小會(huì)影響到mapreduce程序的執(zhí)行效率,原則上說(shuō),緩沖區(qū)越大,磁盤(pán)io的次數(shù)越少,執(zhí)行速度就越快。緩沖區(qū)的大小可以通過(guò)參數(shù)調(diào)整, 參數(shù):io.sort.mb 默認(rèn)100M







猜你喜歡:

MapReduce編程開(kāi)發(fā)實(shí)例——詞頻統(tǒng)計(jì)過(guò)程

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

黑馬程序員python+大數(shù)據(jù)開(kāi)發(fā)培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!