Spark工作流程由4個主體聯系構成(如上圖所示):
- Application:指用戶編寫的Spark應用程序,其中包括一個Driver功能的代碼和分布在集群中多個節點上運行的Executor代碼
- Master:主節點,布置作業
- Block Tracker用於記錄計算數據在Worker節點上的塊信息
- Shuffle Blocker用於記錄RDD在計算過程中遇到Shuffle過程時會進行物化,Shuffle Tracker用於記錄這些物化的RDD的存放信息
- Cluster Manager:控制整個集群,監控worker
- Worker:從節點,負責控制計算,啟動Executor或者Driver。
- Driver: 運行Application 的main()函數
- Executor:執行器,是為某個Application運行在worker node上的一個進程
工作流程:
- 用戶編寫應用程序以后交給Master
- Master啟動RDD Graph,對任務進行划分,構建DAG圖。將DAG圖分解成Stage,將Taskset發送給Task Scheduler。
- 由Task Scheduler將Task發送給Executor運行
- 在這期間,Manager會負責監管Worker的運行。計算結果層層返回。
具體實現:
- 構建Spark Application的運行環境,啟動SparkContext
- SparkContext向資源管理器(可以是Standalone,Mesos,Yarn)申請運行Executor資源,並啟動StandaloneExecutorbackend
- Executor向SparkContext申請Task
- SparkContext將應用程序分發給Executor
- SparkContext構建成DAG圖,將DAG圖分解成Stage、將Taskset發送給Task Scheduler,最后由Task Scheduler將Task發送給Executor運行
- Task在Executor上運行,運行完釋放所有資源
參考文獻:spark工作流程及原理(一)