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任務的到來。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章