1. 程式人生 > >Hadoop shuffer 和 Spark shuffer區別

Hadoop shuffer 和 Spark shuffer區別

 Hadoop shuffer階段分為mapshuffer階段,reduceshuffer階段兩個階段

在理解之前需要知道shuffer是什麼意思,mapreduce的任務流程,大家可以先理解一下再進一步學習下一階段,圖1、2是我在網上找了兩個畫的不錯的mapreduce任務流程圖幫助你們理解。

mapshuffer階段:

   這個階段發生在map階段之後(資料寫入記憶體之前),資料在寫入記憶體的過程就已經開始shuffer了,記憶體的大小是可以改變的,mapreduce.task.io.sort.mb的數值就是記憶體的大小,預設為100M。資料在寫入記憶體大於80%時,會發生溢位(spill)過程,將資料整體移至磁碟,在移至磁碟partitions時會發生排序過程(combiner()),將資料按照排序的規則分佈在分割槽中,然後進入mapshuffer最後一個階段merge,這個過程將一個分割槽的所有資料進行排序合併成一個檔案目錄,以供reduce獲取。

reduceshuffer階段:

          copy merge中的資料到reduce端,這過程中將同一個key的分組放在一起,通過sort()排序,讓後聚合為一個檔案,這個過程實在磁碟上實現的,接下來就是reduce階段了

Spark shuffer

區別在於hadoopshuffer是sort-based,spill記憶體大小是100M,saprk是hash-based(hash-based故名思義也就是在Shuffle的過程中寫資料時不做排序操作,只是將資料根據Hash的結果,將各個Reduce分割槽的資料寫到各自的磁碟檔案中),記憶體大小是32K,Hadoop的shuffle過程是明顯的幾個階段:map(),spill,merge,shuffle,sort,reduce()等,是按照流程順次執行的,屬於push型別;但是,Spark不一樣,因為Spark的Shuffle過程是運算元驅動的,具有懶執行的特點,屬於pull型別。

                                                                                           圖1 

                                                                                            圖2