Spark內(nèi)核分析之SparkContext初始化源碼分析

????????上一篇介紹了spark作業(yè)提交的三種方式,從本篇開(kāi)始逐一介紹Spark作業(yè)運(yùn)行流程中各個(gè)組件的內(nèi)部工作原理。如標(biāo)題所說(shuō),我們先來(lái)看看SparkContext在Spark作業(yè)提交后做了哪些事情,工作流程如下圖所示;(注意:本篇文章及后續(xù)源碼分析所有內(nèi)容全部基于spark1.3.0源碼進(jìn)行分析,后續(xù)不再贅述

SparkContext初始化流程圖

1.Spark作業(yè)提交以后,通過(guò)SparkContext的createTaskScheduler()方法來(lái)初始化scheduler(TaskSchedulerImpl)和backend(SparkDeploySchedulerBackend)對(duì)象;

2.通過(guò)scheduler的initialize()方法初始化其對(duì)應(yīng)的線程池;

3.調(diào)用scheduler的start()方法,在scheduler的start()方法內(nèi)部調(diào)用backend的start()方法;

4.在backend的start()方法內(nèi)部,創(chuàng)建AppClient對(duì)象,并通過(guò)該對(duì)象的start()方法調(diào)用RegisterWithMaster方法,通過(guò)該方法向Master請(qǐng)求注冊(cè);

5.Master調(diào)用worker,worker啟動(dòng)executor后向backend注冊(cè)信息;

下面附上源碼部分截圖;

SparkContext初始入口
初始化TaskScheduler等相關(guān)信息
初始化taskScheduler線程池及調(diào)度方式
taskScheduler的start方法
backend的start方法
初始化AppClient,調(diào)用registerWithMaster()方法
registerWithMaster方法實(shí)現(xiàn)

????????以上即為SparkContext的初始化過(guò)程,在這個(gè)過(guò)程中同時(shí)也初始化了兩外兩個(gè)重要的組建,分別為DAGScheduler和Spark UI;啟動(dòng)DAGScheduler底層是基于DAGSchedulerEventProcessActor進(jìn)行通信的,SparkUI是通過(guò)底層的jetty服務(wù)器來(lái)提供web服務(wù)的;針對(duì)這兩個(gè)組件后續(xù)會(huì)有詳細(xì)講解。

總結(jié):以上即為SparkContext的初始化過(guò)程,源碼涉及的類有:SparkContext,TaskSchedulerImpl,SparkDeploySchedulerBackend,AppClient等,有興趣的可以查看所有詳細(xì)實(shí)現(xiàn)。歡迎關(guān)注。

如需轉(zhuǎn)載,請(qǐng)注明:

上一篇:Spark內(nèi)核分析之spark作業(yè)的三種提交方式

本篇:Spark內(nèi)核分析之SparkContext初始化源碼分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容