????????接著上篇的Schedule調(diào)度內(nèi)容,本篇我們來看看Driver蛙酪,Application向Worker發(fā)送launch以后到底發(fā)生了什么。先來看看下面這張圖;
我們來簡單分析一下這張圖的運行原理咪惠;
1.首先,Master向Worker發(fā)送一個launchDriver的請求淋淀,Worker接收到請求后創(chuàng)建出一個DriverRunner對象遥昧;
2.然后緊接著利用創(chuàng)建的DriverRunner對象調(diào)用其start()方法,啟動一個線程朵纷;
3.在該線程內(nèi)部炭臭,首先創(chuàng)建了一個本地目錄,然后拷貝我們要運行的Jar文件到本地袍辞,接著創(chuàng)建出一個ProcessBuilder對象出來鞋仍;
4.最后利用ProcessBuilder對象啟動Driver進程;
5.當Driver進程啟動完成之后搅吁,向當前啟動DriverRunner線程的Worker節(jié)點發(fā)送一個Driver啟動的狀態(tài)威创;
6.當前Worker在向Master發(fā)送Driver的啟動情況,并清理相關(guān)內(nèi)存信息似芝,到此我們的Driver啟動就完成了那婉;
7.關(guān)于Application的啟動過程,與Driver的啟動基本一致党瓮,只有最后一步不同详炬,當Executor啟動完成向Worker發(fā)送狀態(tài)改變信息,然后將其向Driver進行注冊;
分析完上面的基本原理之后呛谜,我們先來看看Driver啟動的源碼是如何實現(xiàn)的在跳;
以上即為Driver的整個啟動過程隐岛,下面我們來看看Application的啟動過程源碼實現(xiàn)猫妙;
總結(jié):以上就是我們的Worker啟動Driver,Application的整個過程聚凹;到這里割坠,我們已經(jīng)了解到整個Spark啟動初始化的過程,接下來的內(nèi)容我們來正式分析我們的Spark作業(yè)的運行流程是什么樣子妒牙,包括DAGScheduler的調(diào)度彼哼,TaskScheduler中的TaskSet的任務(wù)分配算法的具體實現(xiàn);歡迎關(guān)注湘今。
如需轉(zhuǎn)載敢朱,請注明: