????????上一篇介紹了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ù)不再贅述)

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的初始化過(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)注明: