Spark源码解读系列--SparkContext的初始化(1)

Spark源码解读系列主要是基于《深入理解Spark--核心思想与源码分析》这本书的,另外加上我个人的补充,由于自己也是Spark的初学者,所以暂时不能解读源码背后的设计思想,只能结合书来解读源码的逻辑和功能。

SparkContext的初始化是Driver应用程序提交执行的前提,以下内容将会以local模式,代码顺序进行讲解。

SparkConf

SparkContext的配置参数是由SparkConf负责的,SparkConf初始化将会利用ConcurrentHashMap来维护各种属性,属性都是以“Spark.”开头的。代码如下:

默认loadDefaults是true,将会加载Utils.getSystemProperties返回的对象中以“spark.”开头的字符串。

SparkContext中主构造器的参数就是一个SparkConf参数:

CallSite存储了线程栈中最靠近栈顶的用户类及最靠近栈底的Scala或者Spark核心类信息。就像注释所说creationSite将会知道SparkContext在哪里被创建。如果allowMultipleContext为true,那么将会允许多个SparkContext实例,不会抛出异常,但会有log的警告,由属性spark.driver.allowMultipleContexts控制。在构造器中将会执行markPartiallyConstructed,标记这个SparkContext正在创建,阻止激活多个实例。

在初始化过程中,将会把主构造器中的config复制给var变量_conf,然后进行检查,而且有两个属性必须包括:"spark.master"和"spark.app.name",部分代码如下:

创建执行环境SparkEnv

SparkEnv是Spark的执行环境对象,其中包括众多与Executor执行相关的对象。SparkEnv可以存在于Driver(local模式)或者CoarseGrainedExecutorBackend进程中(Worker中)。SparkContext中的var变量_env将会通过createSparkEnv创建:

createSparkEnv有三个参数,传递的SparkConf,是否是isLocal,以及listenerBus采用监听器模式维护各类事件的处理。createSparkEnv将会调用SparkEnv对象的createDriverEnv
方法:

根据上面说到的,SparkEnv还存在于Executor中,所以也有对应的代码:

在方法createDriverEnv中会调用create创建SparkEnv,SparkEnv的构造步骤如下:

  1. 创建安全管理器SecurityManager
  2. 创建基于Akka的分布式消息系统ActorSystem
  3. 创建Map任务输出跟踪其mapOutputTracker
  4. 实例化ShuffleManager
  5. 创建ShuffleMemoryManeger
  6. 创建块传输服务BlockTransferService
  7. 创建BlockManagerMaster
  8. 创建块管理器BlockManager
  9. 创建广播管理器BroadcastManager
  10. 创建缓存管理器CacheManager
  11. 创建HTTP文件服务器HttpFileServer
  12. 创建测量系统MetricsSystem
  13. 创建SparkEnv

就下来的文章将会详细讲述上面在构造SparkEnv过程中执行的操作

posted @ 2016-12-05 12:33  传奇魔法师  阅读(299)  评论(0编辑  收藏  举报