Spark記錄(二):Spark程式的生命週期

淡墨痕發表於2021-11-07

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

 

相關文章