Spark的job触发流程原理与stage划分算法分析

Spark的application中有多个action操作,每个action操作都会触发RDD的runJob操作,每个job以action操作为界限,而RDD的runJob则在SparkContext的runJob中调用,SparkContext的runJob底层会调用dagScheduler的runJob方法。
在DAGScheduler中,会将每个job划分成多个stage,每个stage会创建一批task并且计算task的最佳位置,一个task对应一个partition。DAGScheduler的stage划分算法如下:它会从触发action操作的那个RDD开始往前倒推,首先会为最后一个RDD创建一个stage,然后往前倒推的时候,如果发现对某个RDD是宽依赖,那么就会将宽依赖的那个RDD创建一个新的stage,那个RDD就是新的stage的最后一个RDD。然后依次类推,继续往前倒推,根据窄依赖或者宽依赖进行stage的划分,直到所有的RDD全部遍历完成为止。
创建完task之后,stage会将一批task用TaskSet来封装,提交给TaskScheduler进行分配,最后发送到Executor执行。

你可能感兴趣的:(spark)