????????最近在研究Spark源碼勺届,順便記錄一下恐疲,供大家學(xué)習(xí)參考梢褐,如有錯(cuò)誤庙洼,請(qǐng)批評(píng)指正。好巡揍,廢話不多說痛阻,這一篇先來講講Spark作業(yè)提交流程的整體架構(gòu)。
第一種腮敌,基于Standalone的方式阱当,整體架構(gòu)如下圖所示;
1.當(dāng)向一個(gè)Standalone模式集群中提交一個(gè)Application的時(shí)候糜工,第一步首先通過反射的機(jī)制創(chuàng)建一個(gè)DriverActor(這里指Driver)進(jìn)程弊添;
2.接著初始化SparkContext對(duì)象出來,在SparkContext初始化的時(shí)候創(chuàng)建出了兩個(gè)很重要的對(duì)象啤斗,分別為DAGScheduler和TaskScheduler對(duì)象表箭;
3.通過Task Scheduler向Spark集群的Master請(qǐng)求注冊(cè),Master接收到請(qǐng)求以后钮莲,通知Worker啟動(dòng)Executor,Worker節(jié)點(diǎn)為Application啟動(dòng)Executor進(jìn)程;
4.當(dāng)Executor啟動(dòng)以后彼水,會(huì)反向注冊(cè)到Task Scheduler上面去崔拥;
5.DAGScheduler會(huì)分配一個(gè)Stage(即一個(gè)Taskset集合)給TaskScheduler,TaskScheduler把TaskSet集合中的每個(gè)task通過task分配算法提交到executor上面去執(zhí)行凤覆;
6.executor接收到一個(gè)task任務(wù)之后链瓦,將其包裝成一個(gè)TaskRunner對(duì)象并調(diào)用線程池中的一條線程去執(zhí)行task;
第二種盯桦,基于yarn-cluster模式的架構(gòu)圖慈俯,如下圖所示;
1.Spark提交作業(yè)到Y(jié)arn集群拥峦,向ResourceManager請(qǐng)求啟動(dòng)ApplicationMaster贴膘;
2.ResourceManager分配一個(gè)Container,然后在Yarn集群中的某個(gè)NodeManager中啟動(dòng)ApplicationMaster略号;
3.ApplicationMaster啟動(dòng)完成以后向ResourceManager請(qǐng)求分配一批Container資源刑峡,以運(yùn)行Spark作業(yè)洋闽;
4.ResourceManager接收到來自ApplicationMaster的請(qǐng)求以后,開始一批Container資源用于啟動(dòng)executor突梦;
5.當(dāng)executor啟動(dòng)成功以后诫舅,將其信息向ApplicationMaster進(jìn)行注冊(cè);
第三種宫患,Yarn-client模式的模式刊懈,如下圖所示;
關(guān)于Yarn-client與Yarn-cluster兩種模式的區(qū)別與使用場景娃闲;
區(qū)別:這兩種spark作業(yè)提交方式的區(qū)別在于Driver所處的位置不同俏讹。
使用場景:Yarn-client模式主要用于測試環(huán)境,因?yàn)槭褂迷撃J教峤蛔鳂I(yè)的時(shí)候畜吊,可以在客戶端實(shí)時(shí)觀察作業(yè)運(yùn)行產(chǎn)生的日志及作業(yè)的運(yùn)行狀況泽疆;Yarn-cluster模式用于實(shí)際生產(chǎn)環(huán)境,因?yàn)槠溥\(yùn)行的作業(yè)所產(chǎn)生的日志是在遠(yuǎn)程的節(jié)點(diǎn)上玲献,不方便程序的調(diào)試殉疼。
總結(jié):以上簡單介紹了三種Spark作業(yè)的提交方式;上述的三種模式中的每個(gè)組件的內(nèi)部工作原理會(huì)在后續(xù)的文章一一解答捌年,包括Master資源分配算法瓢娜,DAGScheduler的stage劃分算法,TaskScheduler任務(wù)分配算法等等礼预。歡迎關(guān)注眠砾。
如需轉(zhuǎn)載,請(qǐng)注明:
Spark內(nèi)核分析之spark作業(yè)的三種提交方式