Spark的作業提交流程簡介

2021-09-05 10:18:39 字數 1916 閱讀 9614

這是自己讀取原始碼並結合他人的總結,寫的大概的流程,僅供參考

處理使用者的 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互動,這一步也叫...