1. 程式人生 > >Spark shuffle原理和詳細圖解

Spark shuffle原理和詳細圖解

shuffle 中Map任務產生的結果會根據所設定的partitioner演算法填充到當前執行任務所在機器的每個桶中。

  •  Reduce任務啟動時時,會根據任務的ID,所依賴的Map任務ID以及MapStatus從遠端或本地的BlockManager獲取相應的資料作為輸入進行處理。
  • Shuffle資料必須持久化磁碟,不能快取在記憶體。

Hash方式:

  1. shuffle不排序,效率高
  2. 生成MXR個shuffle中間檔案,一個分片一個檔案
  3. 產生和生成這些中間檔案會產生大量的隨機IO,磁碟效率低
  4. shuffle時需要全部資料都放在記憶體,對記憶體消耗大
  5. 適合資料量能全部放到記憶體,reduce操作不需要排序的場景

Sort方式:

  1. shuffle需要排序
  2. 生成M個shuffle中間資料檔案,一個Map所有分片放到一個數據檔案中,外
  3. 加一個索引檔案記錄每個分片在資料檔案中的偏移量
  4. shuffle能夠藉助磁碟(外部排序)處理龐大的資料集
  5.  資料量大於記憶體時只能使用Sort方式,也適用於Reduce操作需要排序的場景