spark的工作流程是什麼
回答思路
所有spark程序都離不開程序初始化和執行任務這兩部分,所以該問題可以從這兩部分開始回答。
一、程序初始化的流程
-
用戶通過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資源。
二、任務執行的流程
-
先進行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。
公衆號搜索 guowei
——專注於大數據面試講解,致力於用最簡潔的語言把解題思路講清楚。