Scheduler原理与机制

Scheduler原理与机制

[睡着的水-hzjs-2016.08.22]

一、Scheduler原理

1、Spark 基本的调度图:

Scheduler原理与机制_第1张图片

二、TaskScheduler原理

---1、DAGScheduler在提交TaskSet给底层调度器的时候是面向接口TaskScheduler的,这符合面向对象中依赖抽象不依赖具体的原则,带来了底层资源调度器的可插拔行,使得spark可以运行在各种资源调度器模式上;

---2.TaskScheduler的核心任务是提交taskset 到集群运算并汇报结果:

a、为Taskset创建和维护一个TaskSetManager 并且追踪任务的本地性及错误信息;

b、遇到Straggle任务会放到其它的节点进行重试

c、向DAGScheduler 汇报执行情况,包括在Shuffle 输出out 的时候报告 fetch faild错误等信息;

---3、TaskScheduler内部会握有SchedulerBackend ,从Standalone 的模式来讲具体实现是SparkDeploySchedulerBackend;

---4、SparkDeploySchedulerBackend 在启动的时候构建AppClient实例并在该实例start的时候启动了ClientEndpoint 这个消息循环体,ClientEndpoint在启动的时候会向Master注册当前的程序;而SparkDeploySchedulerBackend 的父类CoaseGrainedSchedulerBackend在start的时候会实例化类型为DriverEndpoint(这就是我们程序运行时候的经典对象的Driver)的消息循环体 ;

#SparkDeploySchedulerBackend是专门负责收集Worker上的资源信息,当ExecutorBackend启动的时候会发送RefisteredExecutor信息向DriverEndpoint注册,此时SparkDeploySchedulerBackend 就掌握了当前应用程序拥有的计算资源,TaskScheduler就是通过SparkDeploySchedulerBackend拥有的计算资源具体运行Task;

---5、SparkContext、DAGScheduler、TaskSchedulerImpl、SparkDeploySchedulerBackend 在应用程序启动的时候只实例化一次,应用程序存在期间始终存在这些对象;

---6、在SparkContext实例化的时候通过createTaskScheduler 来创建TaskSchedulerImpl和SparkDeploySchedulerBackend:

Scheduler原理与机制_第2张图片

#在TaskSchedulerImpl的initralize 方法中把SparkDeploySchedulerBackend 传进来从而赋值为TaskSchedulerImpl的backend;在TaskSchedulerImpl调用start方法的时候会调用backend的start方法;在start方法中最终注册应用程序;、


总结

Scheduler原理与机制_第3张图片

Scheduler原理与机制_第4张图片

Scheduler原理与机制_第5张图片


详细如下:


Scheduler原理与机制_第6张图片

Scheduler原理与机制_第7张图片




你可能感兴趣的:(Spark)