1. 程式人生 > >Spark 原始碼分析之ShuffleMapTask記憶體資料Spill和合並

Spark 原始碼分析之ShuffleMapTask記憶體資料Spill和合並

前置條件

  • Hadoop版本: Hadoop 2.6.0-cdh5.15.0
  • Spark版本: SPARK 1.6.0-cdh5.15.0
  • JDK.1.8.0_191
  • scala2.10.7

技能標籤

  • 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檔案中

原文連結

這裡