1. 程式人生 > >七、MapReduce的Shuffle和Spark的Shuffle異同?談一談各自的特點和過程。

七、MapReduce的Shuffle和Spark的Shuffle異同?談一談各自的特點和過程。

1、MapReduce的Shuffle機制:

在MapReduce框架中,shuffle是連線Map和Reduce之間的橋樑,Map大的輸出要用到Reduce中必須經過shuffle這個環節,

shuffle的效能高低直接影響了整個程式的效能和吞吐量。 Shuffle是MapReduce框架中的一個特定的phase,介於Map phase和Reduce phase之間,當Map的輸出結果要被Reduce使用時,輸出結果需要按key雜湊,並且分發到每一個Reducer上去,這個過程就是shuffle。 由於shuffle涉及到了磁碟的讀寫和網路的傳輸,因此shuffle效能的高低直接影響到了整個程式的執行效率。
  2:Spark的Shuffle機制:   Spark中的Shuffle是 把一組無規則的資料儘量轉換成一組具有一定規則的資料。 Spark計算模型是 在分散式的環境下計算的,這就不可能在單程序空間中容納所有的計算資料來進行計算 ,這樣資料就按照Key進行分割槽,分配成一塊一塊的小分割槽,打散分佈在叢集的各個程序的記憶體空間中,並不是所有計算運算元都滿足於按照一種方式分割槽進行計算。 當需要對資料進行排序儲存時,就有了重新按照一定的規則對資料重新分割槽的必要, Shuffle就是包裹在各種需要重分割槽的運算元之下的一個對資料進行重新組合的過程。
在邏輯上還可以這樣理解:由於重新分割槽需要知道分割槽規則,而分割槽規則按照資料的Key通過對映函式(Hash或者Range等)進行劃分,由資料確定出Key的過程就是Map過程,同時Map過程也可以做資料處理,例如,在Join演算法中有一個很經典的演算法叫Map Side Join,就是確定資料該放到哪個分割槽的邏輯定義階段。 Shuffle將資料進行收集分配到指定Reduce分割槽,Reduce階段根據函式對相應的分割槽做Reduce所需的函式