TaskScheduler概述:
TaskScheduler是一个可插拔任务调度接口,通过不同的SchedulerBackend进行任务的调度。主要功能如下:
1、一个TaskScheduler只为一个SparkContext服务,接收DAGScheduler提交过来的一组组的TaskSet;
2、TaskScheduler将task提交到集群中并执行,如果其中某个Task执行失败则重试之;TaskScheduler将TaskSet对应的执行结果返回才DAGScheduler;
3、TaskScheduler处理straggle任务(比如:100个任务运行,其中99个任务快,1个任务慢,需要在另外一个节点上开启一个相同的任务来运行,谁先完成取用谁);
4、遇到shuffle输出丢失则汇报给DAGScheduler;
5、为每个TaskSet维护一个TaskSetManager追踪本地性(resourceOffer-->findTask)及错误信息;
TaskSet.scala
private[spark] class TaskSet( val tasks: Array[Task[_]], val stageId: Int, //该TaskSet对应哪个stage val attempt: Int, val priority: Int, val properties: Properties) { val id: String = stageId + "." + attempt }