在mapreduce框架中,shuffle是連線map和reduce之間的橋梁,map的輸出要用到reduce中必須經過shuffle這個環節,shuffle的效能高低直接影響了整個程式的效能和吞吐量。spark作為mapreduce框架的一種實現,自然也實現了shuffle的邏輯。
shuffle是mapreduce框架中的乙個特定的phase,介於map phase和reduce phase之間,當map的輸出結果要被reduce使用時,輸出結果需要按key雜湊,並且分發到每乙個reducer上去,這個過程就是shuffle。由於shuffle涉及到了磁碟的讀寫和網路的傳輸,因此shuffle效能的高低直接影響到了整個程式的執行效率。
下面這幅圖清晰地描述了mapreduce演算法的整個流程,其中shuffle phase是介於map phase和reduce phase之間。
概念上shuffle就是乙個溝通資料連線的橋梁,那麼實際上shuffle(partition)這一部分是如何實現的的呢,下面我們就以spark為例講一下shuffle在spark中的實現。
先以圖為例簡單描述一下spark中shuffle的整乙個流程:
m×rm×r,其中
mm是map的個數,
rr是reduce的個數。
這裡的bucket是乙個抽象概念,在實現中每個bucket可以對應乙個檔案,可以對應檔案的一部分或是其他等。
參考:
spark shuffle內在原理說明
在mapreduce框架中,shuffle是連線map和reduce之間的橋梁,map的輸出要用到reduce中必須經過shuffle這個環節,shuffle的效能高低直接影響了整個程式的效能和吞吐量。spark作為mapreduce框架的一種實現,自然也實現了shuffle的邏輯。shuffle是...
Spark Shuffle記憶體分析
分布式系統裡的shuffle 階段往往是非常複雜的,而且分支條件也多,我只能按著我關注的線去描述。肯定會有不少謬誤之處,我會根據自己理解的深入,不斷更新這篇文章。前言用spark寫程式,乙個比較蛋疼的地方就是oom,或者gc嚴重,導致程式響應緩慢,一般這種情況都會出現在shuffle階段。shuff...
Spark shuffle流程細則
hadoop中的shuffle存在map任務和reduce任務之間,而spark中的shuffle過程存在stage之間。shuffle操作分為兩種,分別是寫操作和讀操作。基於排序的shuffle操作 基於雜湊的shuffle操作會產生很多檔案,這對檔案系統來說是乙個非誠大的負擔,而且在總資料量不大...