Spark的调度器分为两种:面向stages的调度器和面向tasks的调度器。面向stages的调度器即DAGScheduer,面向tasks的调度器即TaskScheduler。
DAGScheduler作用:
(1)首先将作业分成如果个stage,然后将这些stages以TaskSet的形式提交给TaskScheduler
(2)根据当前的缓存状态,为每个task找到preferred locations来执行该task。换句话说就是将当前的task发送到存放该数据的节点上执行该task,和hadoop的map阶段类似,移动计算而不是移动数据
(3)会处理由于shuffle输出文件丢失导致失败的任务,此时会重新提交Stage输出。但是如果一个任务是在stage内部的不是有Shuffle文件输出丢失导致失败的任务,此时会有taskScheduler负责
总而言之,DAGScheduler的作用主要是将作业分成若干个Stage,然后以TaskSet的形式将这些Stage提交给TaskScheduler调度