SparkConf加载与SparkContext建立(源码阅读二)

  紧接着昨天,咱们继续开搞了啊。。apache

  一、下面,开始建立BroadcastManager,就是传说中的广播变量管理器。BroadcastManager用于将配置信息序列化后的RDDJob以及ShuffleDependency等信息在本地存储。紧接着blockManager的建立后建立。以下:缓存

  随之咱们继续深刻看这个broadcastManager是怎么建立与实现的。spa

  能够看到,在initialize()初始化方法调用之后,经过utils.classForName反射生成工厂实例broadcastFactory,能够配置属性spark.broadcast.factory指定,默认为org.apache.spark.broadcast.TorrentBroadcastFactory。广播变量与非广播变量都是以broadcastFactory工厂实现的。3d

  二、接下来,开始建立缓存管理器CacheManager。CacheManager用于缓存RDD某个分区计算后的中间结果,缓存计算结果发生在迭代计算的时候,那么它是怎么实现的呢。咱们继续深刻~代理

  咱们能够看到,在建立cacheManager对象的时候,传入了blockManager,真正的缓存对象,依旧是blockManager,cacheManager是为blockManager作了代理。当迭代计算中,若是判断使用了缓存,就会调用getOrCompute,从blockManager.get(key)获取存储的block,若是存在,则封装new InterruptibleIterator返回,不然将从新loading partition,从CheckPoint中获取数据,调用putInBlockManager方法将数据写入缓存,进行InterruptibleIterator封装。对象

  再次深刻调用putInBlockManager的过程。发现传入了partition的key,computedValues,storageLevel存储等级,由BlockId,BlockStatus组成的元素。随之它里面又搞了些事情。blog

  

  若是存储级别不容许使用内存,那么直接调用BlockManager的putIterator方法。经过判断putLevel.useMemory,也就是存储级别容许存储,那么就进行展开,若是展开成功则将数据存入内存,不然则写入磁盘。内存

 

  而后继续,咱们看下,开始建立metricsSystem,主要是用于加载metrics.properties文件中的属性配置,当全部的基本组件准备好后,开始建立SparkEnv.get

  

 

最后,建立MetadataCleaner,它的实质是一个用TimeTask实现的定时器,用于清理persistentRdds中的过时内容,最后的最后建立SparkUI.it

好了~今天就到这里,明日继续,我去敲代码咯~~~~

相关文章
相关标签/搜索