共計 950 個字符,預計需要花費 3 分鐘才能閱讀完成。
怎樣理解 MapReduce 中 shuffle,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
概念解釋:
shuffle:簡單的名稱稱為 混洗。事實上 shuffle 是一個非常非常簡單的概念。簡單點來說就是洗牌。
shuffle:按照固定的規(guī)則,就【key,value】而言。
前提
由于之前一直都是使用的 Hadoop1,并未使用 Hadoop Yarn,所以有關 shuffle 的機制,還請參考最新的底層 API
1:不管是在 Map 端,還是 Reduce 端,不管是 Hadoop MapReduce 還是 Storm。對于數(shù)據(jù)的內(nèi)部處理,很多時候都需要
對于是底層的 內(nèi)存和磁盤做出一個合理的取舍。
Map 端:
1:數(shù)據(jù)并不是簡單的把他直接的寫到了磁盤,這個過程比較復雜,他利用了緩沖的方式寫到了內(nèi)存,并且出于效率上的考慮,進行了預排序。
2:每一個默認的 Map 任務都會有一個環(huán)形的緩存區(qū)。這個緩存區(qū)用來持有 Map 的輸出,我印象中是 100M 左右,一旦達到的固定的必烈,那么就會把內(nèi)容寫到磁盤之中,在寫磁盤的過程之中,Map 輸出繼續(xù)被寫入到緩沖區(qū)。
3:在寫入到緩存區(qū)之前,會將這個數(shù)據(jù)進行一次分區(qū)和排序(這個分區(qū)和排序?qū)凑?reduce 的對應關系來生成)
4:關于這個分區(qū)的數(shù)據(jù)將通過 Http 的協(xié)議來傳遞給 Reduce 端。
Reduce 端:
Reduce 端口的第一個階段是:copy 階段,也就是說我們需要把數(shù)據(jù)從 Map 端口 copy 到 Reduce 端口。如果 Map 的端口輸出相當?shù)男。敲淳蜁粡椭频?Reduce 端。
其次:在拉取到數(shù)據(jù)之后,我們將進入到了:排序的階段。 sort phase 階段,更恰當?shù)膩碚f,是一個合并的階段,因為排序的階段已經(jīng)在 Map 端口完成了。只需要在 reduce 端合并就可以了
對于 MapReduce,之前我也是能實現(xiàn)類 qq 圈子算法,對于算法,我也是整本算法導論的人。而,如今卻忘的一干二凈。記憶會消失,不需要的事物會遺忘。
看完上述內(nèi)容,你們掌握怎樣理解 MapReduce 中 shuffle 的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!