标签:
2. SchedulerBackend
SchedulerBackend是一个trait,主要的功能是向当前等待分配计算资源的Task分配计算资源Executor,并且在分配的Executor上启动Task,完成计算的调度过程。上述任务调度是通过方法def reviveOffers(): Unit实现的。需要说明的是CoarseGrainedSchedulerBackend是SchedulerBackend的一个具体实现,而YARN、Standalone和Mesos都是基于SchedulerBackend,然后加入自身的逻辑进行实现的。
3. TaskScheduler
在DAGScheduler将一组Task划分完成后,会将这组Task提交到TaskScheduler。TaskScheduler通过Cluster Manager在集群中的某个Worker的Executor上启动任务。TaskScheduler是 一个trait,在不同的资源管理框架下,TaskScheduler的实现方式也是不同的。对于Local、Standalone和Mesos来说,它 们的 TaskScheduler就是TaskSchedulerImpl,而对于YARN Cluster和YARN Client来说,它们的TaskScheduler的实现继承于TaskSchedulerImpl。
TaskSchedulerImpl调用reviveOffers的场景,包括:(1)有新任务提交时。(2)有任务计算失败时。(3)计算节点Executor不可用时。(4)某些任务执行过慢而需要为它重新分配资源时。
四. Deploy模块详解
五. Executor模块详解
六. Shuffle模块详解
七. Storage模块详解
八. SparkContext详解
SparkContext是Spark应用的入口,它负责和整个集群的交互,包括创建RDD,累加器和广播变量等。整体框架如下所示:
解析:
(1)用户创建的SparkContext实例会连接到Cluster Manager。Cluster Manager会根据用户提交时设置的CPU和内存等信息为本次提交分配计算资源,启动Executor。
(2)Driver会将用户程序划分为不同的Stage,每个Stage由一组完全相同的Task组成,这些Task分别作用于待处理数据的不同分区。在Stage划分完成和Task创建后,Driver就会向Executor发送Task。
(3)Executor接收到Task后,会下载Task运行时依赖,然后开始执行Task,并且将Task的运行状态汇报给Driver。
(4)Driver会根据收到的Task的运行状态来处理不同的状态更新。其中,Task分为两种:Shuffle Map Task的结果保存到Executor所在节点的文件系统中,而ResultTask负责生成结果数据。
(5)Driver会不断地调用Task,将Task发送到Executor上执行,在所有的Task都正确执行或超过执行次数的限制仍然没有执行成功时停止。
参考文献:
[1] Spark技术内幕:深入解析Spark内核架构设计与实现原理
标签:
原文地址:http://www.cnblogs.com/shengshengwang/p/5685492.html