Spark首先会对Job进行一系列的RDD转换操作,并通过RDD之间的依赖关系构建DAG(有向无环图)。然后根据RDD依赖关系将RDD划分到不同的stage中,每个stage按照partition的数量创建多个Task,最后将这些Task提交到集群的work节点上执行。具体流程如下图所示:
- 通过RDD构建DAG。
- DAGScheduler负责调度DAG,把DAG拆分成Stage(TaskSet),提交每个Stage到TaskScheduler。
- TaskScheduler负责接收TaskSet,通过Cluster Manager调度,对于fail或慢的task进行retry。
- 在Worker/Container中,执行具体的Task。