1. 程式人生 > >Spark 現金盤彩票開獎網原始碼下載原始碼分析之ShuffleMapTask記憶體資料Spill和合並

Spark 現金盤彩票開獎網原始碼下載原始碼分析之ShuffleMapTask記憶體資料Spill和合並

  •  現金盤彩票開獎網原始碼下載聯絡方式:QQ:2747044651【征途原始碼論壇http://t.cn/Eyb4XkK】Spark ShuffleMapTask 記憶體中的資料Spill到臨時檔案
  • 臨時檔案中的資料是如何定入的,如何按partition升序排序,再按Key升序排序寫入(key,value)資料
  • 每個臨時檔案,都存入對應的每個分割槽有多少個(key,value)對,有多少次流提交陣列,陣列中保留每次流的大小
  • 如何把臨時檔案合成一個檔案
  • 如何把記憶體中的資料和臨時檔案,進行分割槽,按key,排序後,再寫入合併檔案中

記憶體中資料Spill到磁碟

  • ShuffleMapTask進行當前分割槽的資料讀取(此時讀的是HDFS的當前分割槽,注意還有一個reduce分割槽,也就是ShuffleMapTask輸出檔案是已經按Reduce分割槽處理好的)
  • SparkEnv指定預設的SortShuffleManager,getWriter()中匹配BaseShuffleHandle物件,返回SortShuffleWriter物件
  • SortShuffleWriter,用的是ExternalSorter(外部排序物件進行排序處理),會把rdd.iterator(partition, context)的資料通過iterator插入到ExternalSorter中PartitionedAppendOnlyMap物件中做為記憶體中的map物件資料,每插入一條(key,value)的資料後,會對當前的記憶體中的集合進行判斷,如果滿足溢位檔案的條件,就會把記憶體中的資料寫入到SpillFile檔案中
  • 滿中溢位檔案的條件是,每插入32條資料,並且,當前集合中的資料估值大於等於5m時,進行一次判斷,會通過演算法驗證對記憶體的影響,確定是否可以溢位記憶體中的資料到檔案,如果滿足就把當前記憶體中的所有資料寫到磁碟spillFile檔案中
  • SpillFile呼叫org.apache.spark.util.collection.ExternalSorter.SpillableIterator.spill()方法處理
  • WritablePartitionedIterator迭代物件對記憶體中的資料進行迭代,DiskBlockObjectWriter物件寫入磁碟,寫入的資料格式為(key,value),不帶partition的