spark的工做流程?
回答思路
全部spark程序都離不開程序初始化和執行任務這兩部分,因此該問題能夠從這兩部分開始回答。面試
1、程序初始化的流程
- 用戶經過sparksubmit提交程序之後,driver程序開始運行(driver程序就是運行起來的提交的程序,能夠理解爲spark的main程序)。
- driver程序運行起來會首先初始化sparkContext。
- 在SparkContext對象中作的最重要的事情就是構造出一個DAGSchedule和一個TaskScheduler。
- 上述的TaskScheduler構建出來之後,經過它的一個後臺進程去向spark的Master節點註冊該driver對應的application,此時該application也附帶了該spark程序所須要的資源信息。
- Master接收到這個Application的時候,會根據application所須要的資源,從本身的work節點啓動對應的Executor進程。
- 當worker節點中的Executor進程啓動起來以後,會反向註冊到TaskScheduler上面,通知TaskScheduler,我已經準備好了,能夠幹活了。
- 至此,new sparkcontext()初始化完畢,TaskScheduler已經拿到了Executor資源。
2、任務執行的流程
- 先進行Job及Stage的切分,當程序每讀到action的時候,DAGScheduler開始切分Job,根據寬窄依賴切分Stage,而後封裝成TaskSet,將TaskSet發送給TaskScheduler,一個TaskSet對應一個Stage,一個Stage在對應的一個job裏面。
- 發送task到執行進程,當TaskSchedule拿到TaskSet之後,會將TaskSet打散,變成一個個的task,TaskScheduler會把Taskset裏面每個Task提交到分配的Executor中去執行。
- task開始執行,當Executor接收到Task一塊,會啓動一個TaskRunner,將Task封裝起來,TaskRunner會從線程池中拿一個線程會運行這個task。
公號:guoweiapp
——專一於大數據面試講解,致力於用最簡潔的語言把解題思路講清楚。大數據
![qrcode_for_gh_2c33526595a4_344.jpg qrcode_for_gh_2c33526595a4_344.jpg](http://static.javashuo.com/static/loading.gif)