spark shuffle

一:
爲何須要Sort-Based Shuffle?
    1.Shuffle通常包含兩個階段:第一部分,產生Shuffle的階段(也叫Map階段),第二階段,使用Shuffle數據的階段(也叫Reduce階段)
    2.Spark的Job會被劃分紅不少Stage,若是隻有一個Stage則這個Job就只有一個Mapper,固然不會產生Shuffle,適合ETL。
      若是不止一個Stage,最後一個Stage就是最終的Reduce,最左側的Stage就僅僅是整個Job的Mapper,中間全部的任意一個
      Stage是其父Stage的Reducer,其子Stage的Mapper
    3.Spark Shuffle在最開始的時候只支持Hash-base Shuffle:默認Mapper階段會爲Reducer階段的每個Task單首創建一個
      文件來保存該Task中要使用的數據,可是在一些狀況下(例如數據量很是大的狀況)會形成數據文件(M*R M:Mapper端的並
      行任務數,R:Reducer端的並行任務數)的隨機磁盤I/O操做,且會造成大量的Memory消耗(極易形成OOM),後來改善方式
      是加入了Shuffle Consolidate機制來將Shuffle時候產生文件的數量減小到C*R個(C:Mapper端同時可以使用Cores的數
      量,R:Reducer端的並行任務數)。若是此時Reducer端的並行任務數過多,依舊沒有逃脫文件過多的命運
相關文章
相關標籤/搜索