RDD 任務劃分

v>

RDD 任務切分中間分爲:Application、Job、Stage 和 Task
   Application:初始化一個 SparkContext 即生成一個 Application;
   Job:一個 Action 算子就會生成一個 Job;
   Stage:Stage 等於寬依賴(ShuffleDependency)的個數加 1;
   Task:一個 Stage 階段中,最後一個 RDD 的分區個數就是 Task 的個數。
注意:Application->Job->Stage->Task 每一層都是 1 對 n 的關係。
源碼分析:
第一步:handleJobSubmitted()函數中

 第二步:進入submitStage(),查看下方submitMissingTasks()這一段代碼,與任務Task劃分有關

    匹配階段shuffleMapStage or ResultStage
    每個case中的new Task的個數,即爲任務的個數
    Task個數與map映射的size有關
    map的size取決於partitionsToCompute的結果

DAGSchedluer.scala

 DAGSchedluer.scala的submitMissingTasks方法

 第三步:進入partitionsToCompute,複製findMissingPartitions,因爲findMissingPartitions是stage的屬性,stage此時爲ResultStage(以ResultStage爲例),因此後退,點擊ResultStage,搜索findMissingPartitions

 DAGSchedluer.scala

 

 其中job.numPartitions是來自於當前階段最後一個RDD的分區數

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章