- Spark大數據商業實戰三部曲:內核解密|商業案例|性能調優
- 王家林
- 478字
- 2019-12-12 17:30:00
7.1 概述
在MapReduce框架中,Shuffle階段是連接Map和Reduce之間的橋梁,Map階段通過Shuffle過程將數據輸出到Reduce階段中。由于Shuffle涉及磁盤的讀寫和網絡I/O,因此Shuffle性能的高低直接影響整個程序的性能。Spark本質上也是一種MapReduce框架,因此也會有自己的Shuffle過程實現。
在學習Shuffle的過程中,通常都會引用HadoopMapReduce框架中的Shuffle過程作為入門或比較,同時也會引用在Hadoop MapReduce框架中的Shuffle過程中常用的術語。下面是網絡上描述該過程的經典的框架圖,如圖7-1所示。

圖7-1 Hadoop MapReduce框架中的Shuffle框架
其中,Shuffle是MapReduce框架中的一個特定的階段,介于Map階段和Reduce階段之間。Map階段負責準備數據,Reduce階段則讀取Map階段準備的數據,然后進一步對數據進行處理,即Map階段實現Shuffle過程中的數據持久化(即數據寫),而Reduce階段實現Shuffle過程中的數據讀取。
在圖7-1中,Mapper端與Reduce端之間的數據交互通常都伴隨著一定的網絡I/O,因此對應數據的序列化與壓縮等技術也是Shuffle中必不可少的一部分。可以根據特定場景選取合適的序列化方式與壓縮算法進行調優,在此僅給出相關的配置屬性的簡單描述,具體見表7-1所示。
表7-1 Shuffle序列化方式與壓縮算法的配置屬性

可以基于圖7-1,抽象地去理解Shuffle階段的實現過程,但在具體實現上,不同的Shuffle設計會有不同的實現細節。
推薦閱讀