本文主要是介绍SparkContext源码深入剖析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本节分析针对Standalone模式
版本:Spark2.11
在Spark中,SparkContext是Spark所有功能的一个入口,你无论是用java、scala,甚至是python编写都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件,包括 调度器(DAGSchedule、TaskScheduler),还会去到Spark Master节点上进行注册,等等
一句话,SparkContext,是Spark应用中,可以说是最最重要的一个对象
但是呢,在Spark中,编写不同类型的Spark应用程序,使用的SparkContext是不同的,如果使用scala,
// 使用的就是原生的SparkContext对象
// 但是如果使用Java,那么就是JavaSparkContext对象
// 如果是开发Spark SQL程序,那么就是SQLContext、HiveContext
// 如果是开发Spark Streaming程序,那么就是它独有的SparkContext
// 以此类推
一、 TaskScheduler的初始化
1、 TaskScheduler的创建
2分析standalone集群模式
3、分析TaskSchedulerImpl
/*** Schedules tasks for multiple types of clusters by acting through a SchedulerBackend.
底层通过操作一个SchedulerBackend,针对不同种类的cluster(standalone,yarn,mesos)调度task* It can also work with a local setup by using a [[LocalSchedulerBackend]] and setting isLocal to true.
它也可以通过使用一个LocalSchedulerBackend并且将isLocal设置为true,来在本地模式下运行
It handles common logic, like determining a scheduling order across jobs, waking up to launch speculative tasks, etc.
*它负责处理一些通用的逻辑,比如说决定多个job的调度顺序,启动推测任务执行* Clients should first call initialize() and start(), then submit task sets through the runTasks method.*客户端首先应调用它的initialize()和start方法,然后通过runTask()提交task sets* THREADING: [[SchedulerBackend]]s and task-submitting clients can call this class from multiple* threads, so it needs locks in public API methods to maintain its state. In addition, some* [[SchedulerBackend]]s synchronize on themselves when they want to send events here, and then* acquire a lock on us, so we need to make sure that we don't try to lock the backend while* we are holding a lock on ourselves.*/
private[spark] class TaskSchedulerImpl(val sc: SparkContext,val maxTaskFailures: Int,isLocal: Boolean = false)extends TaskScheduler with Logging
4、调用initialize()方法,创建调度池
5、调用start方法
调用StandaloneSchedulerBackend的start()
6、创建ApplicationDescription
它就代表了执行当前这个application最大需要多少cpu core,每个salve上需要多少内存
7 、创建了StandaloneAppClient
这是一个接口,它负责为appliction与Spark集群进行通信
它会接受一个spark masret的URL以及 app description和一个集群时间的监听器,以及各种事件发生时,监听器的回调函数
到此阶段TaskScheduler的初始化完成
二、初始化DAGScheduler
这篇关于SparkContext源码深入剖析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!