partition的形成過程

作者:王燚光

鏈接:http://www.zhihu.com/question/33270495/answer/93424104
來源:知乎
梳理一下Spark中關於併發度涉及的幾個概念File,Block,Split,Task,Partition,RDD以及節點數、Executor數、core數目的關係。
spark-learning

輸入可能以多個文件的形式存儲在HDFS上,每個File都包含了很多塊,稱爲Block
當Spark讀取這些文件作爲輸入時,會根據具體數據格式對應的InputFormat進行解析,一般是將若干個Block合併成一個輸入分片,稱爲InputSplit,注意InputSplit不能跨越文件。
隨後將爲這些輸入分片生成具體的Task。InputSplit與Task是一一對應的關係。
隨後這些具體的Task每個都會被分配到集羣上的某個節點的某個Executor去執行。

  • 每個節點可以起一個或多個Executor。
  • 每個Executor由若干core組成,每個Executor的每個core一次只能執行一個Task。
  • 每個Task執行的結果就是生成了目標RDD的一個partiton

注意: 這裏的core是虛擬的core而不是機器的物理CPU核,可以理解爲就是Executor的一個工作線程。

而 Task被執行的併發度 = Executor數目 * 每個Executor核數。

至於partition的數目:

  • 對於數據讀入階段,例如sc.textFile,輸入文件被劃分爲多少InputSplit就會需要多少初始Task。
  • 在Map階段partition數目保持不變。
  • 在Reduce階段,RDD的聚合會觸發shuffle操作,聚合後的RDD的partition數目跟具體操作有關,例如repartition操作會聚合成指定分區數,還有一些算子是可配置的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章