SparkContext的初始化
SparkContext是应用启动时创建的Spark上下文对象,是进行Spark应用开发的主要接口,是Spark上层应用与底层实现的中转站(SparkContext负责给executors发送task)。
SparkContext在初始化过程中,主要涉及一下内容:
- SparkEnv
- DAGScheduler
- TaskScheduler
- SchedulerBackend
- SparkUI
生成SparkConf
SparkContext的构造函数中最重要的入参是SparkConf。SparkContext进行初始化的时候,首先要根据初始化入参来构建SparkConf对象,进而再去创建SparkEnv。
创建SparkConf对象来管理spark应用的属性设置。SparkConf类比较简单,是通过一个HashMap容器来管理key、value类型的属性。
下图为SparkConf类声明,其中setting变量为HashMap容器:
下面是SparkContext类中,关于SparkConf对象的拷贝过程:
创建LiveListenerBus监听器
这是典型的观察者模式,向LiveListenerBus类注册不同类型的SparkListenerEvent事件,SparkListenerBus会遍历它的所有监听者SparkListener,然后找出事件对应的接口进行响应。
下面是SparkContext创建LiveListenerBus对象:
// An asynchronous listener bus for Spark events
private[spark] val listenerBus = new LiveListenerBus
创建SparkEnv运行环境
在SparkEnv中创建了MapOutputTracker、MasterActor、BlockManager、CacheManager、HttpFileServer一系列对象。
下图为生成SparkEnv的代码:
SparkEnv的构造函数入参列表为:
class SparkEnv (
val executorId: String,
val actorSystem: ActorSystem,
val serializer: Serializer,
val closureSerializer: Serializer,
val cacheManager: CacheManager,
val mapOutputTracker: MapOutputTracker,
val shuffleM