Spark記錄(二):Spark程式的生命周期
本文以Spark執行模式中最常見的集群模式為例,詳細的描述一下Spark程式的生命周期(YARN作為集群管理器)。
1、集群節點初始化
集群剛初始化的時候,或者之前的Spark任務完成之後,此時集群中的節點都處於空閑狀態,每個伺服器(節點)上,只有YARN的進程在運行(環境進程不在此考慮範圍內),集群狀態如下所示:
每個節點伺服器上都有一個YARN的管理器進程在檢測著伺服器的狀態。藍色的是YARN主節點。
2、創建Spark驅動器進程
如上圖所示,客戶端將程式包(jar包或程式碼庫)提交到集群管理器的驅動節點(即master節點),此時驅動節點會給Spark驅動器進程申請資源,並將其在某一個節點伺服器上啟動起來。程式包也發給Spark驅動器。
注意此時只有Spark的驅動器Driver進程,執行器Executor進程還未創建。
3、創建Spark集群
Spark的Driver進程啟動後,開始執行用戶程式碼。用戶程式碼中會先初始化包含Spark集群資訊的SparkSession,該SparkSession中就存有執行器所需資源的配置資訊,它會與集群管理器的master進程通訊(下圖實線箭頭),要求集群管理器在集群上啟動所需要Spark的Executor(下圖虛線箭頭)。集群管理器按要求啟動完Executor之後,會將啟動的Executor及其所在節點資訊發送給Spark的Driver進程,後面將由Spark的Driver對所有的Executor進程進行操控。這就構建出來了一個Spark集群。
4、執行Spark程式
由於Spark的Driver進程已經從集群管理器處獲取到了所有可以調度的Executor資訊,下面就開始執行程式碼了,如下圖所示。
Spark的Driver進程與Executor進程互相通訊,下發task和回饋執行結果,直到程式程式碼執行完成或異常退出。
5、結束運行
當Spark程式執行完成之後,Driver進程會發消息給集群管理器的Master節點告知執行結果(下圖箭頭1),集群管理器會關閉該Spark驅動器對應的Executor進程。至此,資源全部被回收,Spark集群完成本次任務,用戶可以通過集群管理器得到Spark任務的執行結果。
Spark集群資源完全釋放之後,就又進入了第一步中的集群節點初始化的狀態,等待下一個Spark任務的到來。