這是自己讀取原始碼並結合他人的總結,寫的大概的流程,僅供參考
處理使用者的 jar 或者資源檔案,和日誌處理相關:iseventlogenabled、eventlogdir、eventlogcodec的初始化
初始化非同步監聽 bus:livelistenerbus,監聽 spark 事件,用於 sparkui 的跟蹤管理
建立executorenvs,是map型別,用於接受反向註冊的executor資訊
需要先啟動 heartbeatreceiver:setupendpoint 方法
建立tasksceduler,schedulerbackend,dagscheduler;taskscheduler在heartbeatreceiver上進行註冊,schedulerbackend會在taskscheduler上註冊
生成stageset,提交stage到 waiting stage 和乙個 running stage兩個hashset中
running stage 提交後,分析 stage 裡 task 的型別,生成乙個 task 描述(resulttask和 shufflemaptask),即 taskset
呼叫 taskscheduler.submittask(taskset, …) 方法,把 task 描述提交給 taskscheduler 。
taskscheduler 依據資源量和觸發分配條件,會為這個 taskset 分配資源並觸發執行(schedulerbackend)。
dagscheduler 提交 job 後,非同步返回jobwaiter 物件,能夠返回 job 執行狀態,能夠 cancel job, 執行成功後會處理並返回結果
taskscheduler:
維護 task 和 executor 對應關係,executor 和物理資源對應關係,在排隊的 task 和正在跑的 task。維護內部乙個任務佇列,根據fifo 或 fair 策略,排程任務。
schedulerbackend :
schedulerbackend 把自己手頭上的可用資源交給 taskscheduler, taskscheduler 根據排程策略分配給排隊的任務,返回一批可執行的任務描 述,schedulerbackend 負責 launchtask,即最終把task塞到了executor模型上,executor 裡 的執行緒池會執行 task的run()
resulttask和 shufflemaptask:即最後輸出和中間過程兩種task
設想有: stage1 ----shuffle--------> stage2 -----shuffle------> stage3
stage3就是乙個resulttask, 因為是最終的action的執行;
stage2既是1個shuffle的資料讀取者, 又是1個shuffle的資料輸出者, 乙個task同時兼具上述兩種角色;
stage1就是乙個shufflemaptask
accumulator:計數器
a. 如果 task 是 resulttask,在 job 裡為該 task 置為 true,job finish 總數加一。如果 task 執行成功,對應的 stage 裡減去這個 task,
b. 如果 task 是 shufflemaptask,在 stage 裡加上乙個 output location,裡面是乙個 mapstatus 類。mapstatus 是 shufflemaptask 執行完成的返回,包含 location 資訊和 block size( 使下乙個stage能夠讀取上乙個stage的結果)。
總感覺需要一張圖來描述這一過程,但是我看了好幾個圖都感覺沒法把這些過程完美的展現出來,感覺老李的這個圖還是比較好的,雖然只有乙個大概的流程
Spark任務提交流程
spark任務提交流程挺複雜的,下面給乙個相對簡單的任務提交流程 driver程序啟動以後,首先構建sparkcontext,sparkcontext主要包含兩部分 dagscheduler和taskscheduler master接受到任務註冊資訊之後,根據自身資源呼叫演算法在spark集群的wo...
Spark任務提交流程
建立sparkcontext物件,其中包含dagscheduler和taskscheduler executor內部會建立執行task的執行緒池,然後把啟動的executor反向註冊給driver dagscheduler負責把spark作業轉化成stage的dag,根據寬窄依賴切分stage,然後...
Spark任務提交流程
spark的任務執行流程沒有hadoop那麼繞,它的流程其實就是當你執行submit的的時候driver會和master進行互動,因為對於spark來說master是掌控集群資源的元件,和hadoop的yarn是一樣的作用,master會通知有資源的伺服器節點,去主動的和driver互動,這一步也叫...