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的分区数

 

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