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

好了~今天就到這裏,明日繼續,我去敲代碼咯~~~~

相關文章
相關標籤/搜索