簡單來講:driver端劃分任務,向資源管理器傳送申請資源,executor向driver端(不是master)申請task,負責執行任務
driver端向資源管理器master(可能是hmaster或者yarn的nodemanager)傳送註冊和申請計算資源的請求
master通知對應的worker節點啟動executor程序(計算資源)
executor程序向driver端傳送註冊並申請task請求
driver端執行客戶端的main方法,構建sparkcontext物件,在sparkcontext物件內部一次構建dagscheduler
和taskscheduler
按照客戶端**生成rdd的一系列操作順序,生成dag有向無環圖
dagscheduler拿到dag有向無環圖之後,按照寬依賴進行stage的劃分。每乙個stage內部有很多可以並行執行的task,最後封裝在乙個乙個的taskset集合中,然後把taskset傳送給taskscheduler
taskscheduler得到taskset集合之後,依次遍歷取出每乙個task提交到worker節點上的executor程序中執行
所有task執行完成,driver端向master傳送登出請求,master通知worker關閉executor程序,worker上的計算資源得到釋放,最後整個任務也就結束了。
幾點注意事項:
誰負責劃分任務
dagsheduler提交給taskscheduler的基本單位是什麼?、
executor執行的基本單位是什麼?
注意第七步
driver端執行客戶端的main方法,構建sparkcontext物件,在sparkcontext物件內部依次構建dagscheduler和taskscheduler
按照rdd的一系列操作順序,來生成dag有向無環圖
dagscheduler拿到dag有向無環圖之後,按照寬依賴
進行stage的劃分。每乙個stage內部有很多可以並行執行
的task,最後封裝在乙個乙個的taskset集合中,然後把taskset傳送給taskscheduler
taskscheduler得到taskset集合之後,依次遍歷取出每乙個task提交到worker節點上的executor程序中執行。
所有task執行完成,整個任務也就結束了
注意
Spark執行架構
job 包含多個task組成的平行計算,乙個dag觸發的作業,由action運算元觸發,在sparkcontext中通過runjob方法向spark提交job stage job的排程單位,每個job會根據rdd的寬依賴關係被切分成很多stage,每個stage中包含一組相同的task,這組task...
Spark執行架構
在driver program中新建sparkcontext 包含sparkcontext的程式稱為driver program 2 sparkcontext向資源管理器申請執行executor資源,並啟動standaloneexecutorbackend,executor向sparkcontent...
Spark執行架構
spark執行架構要背下來 driver program 執行main函式的程序,並且建立了乙個sparkcontext cluster manager 乙個從cluster申請資源的外部服務 deploy mode 區分driver程序跑在 client模式下,driver跑在本地 cluster...