spark分區數,task數目,core數,worker節點個數,excutor數量梳理 spark分區數,task數目,core數,worker節點個數,excutor數量梳理

轉載自:https://www.cnblogs.com/hadoop-dev/p/6669232.htmlhtml

spark分區數,task數目,core數,worker節點個數,excutor數量梳理併發

 

做者:王燚光
連接:https://www.zhihu.com/question/33270495/answer/93424104
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

oop

輸入可能以多個文件的形式存儲在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的一個工做線程。post

而 Task被執行的併發度 = Executor數目(SPARK_EXECUTOR_INSTANCES) * 每一個Executor核數(SPARK_EXECUTOR_CORES)url

至於partition的數目:
  • 對於數據讀入階段,例如sc.textFile,輸入文件被劃分爲多少InputSplit就會須要多少初始Task。
  • 在Map階段partition數目保持不變。
  • 在Reduce階段,RDD的聚合會觸發shuffle操做,聚合後的RDD的partition數目跟具體操做有關,例如repartition操做會聚合成指定分區數,還有一些算子是可配置的。

RDD在計算的時候,每一個分區都會起一個task,因此rdd的分區數目決定了總的的task數目。
申請的計算節點(Executor)數目和每一個計算節點核數,決定了你同一時刻能夠並行執行的task。
好比的RDD有100個分區,那麼計算的時候就會生成100個task,你的資源配置爲10個計算節點,每一個兩2個核,同一時刻能夠並行的task數目爲20,計算這個RDD就須要5個輪次。
若是計算資源不變,你有101個task的話,就須要6個輪次,在最後一輪中,只有一個task在執行,其他核都在空轉。
若是資源不變,你的RDD只有2個分區,那麼同一時刻只有2個task運行,其他18個核空轉,形成資源浪費。這就是在spark調優中,增大RDD分區數目,增大任務並行度的作法。spa

相關文章
相關標籤/搜索