码迷,mamicode.com
首页 > 其他好文 > 详细

Spark源码学习和总结2

时间:2016-07-19 18:24:58      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

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内核架构设计与实现原理

Spark源码学习和总结2

标签:

原文地址:http://www.cnblogs.com/shengshengwang/p/5685492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!