1. 程式人生 > >Spark入門(七):Spark執行時架構

Spark入門(七):Spark執行時架構

這裡寫圖片描述
在一個 Spark 叢集中,有一個節點負責中央協調,排程各個分散式工作節點。這個中央協調節點被稱為驅動器(Driver)節點,與之對應的工作節點被稱為執行器(executor)節點。驅動器節點可以和大量的執行器節
點進行通訊,它們也都作為獨立的 Java 程序執行。驅動器節點和所有的執行器節點一起被稱為一個 Spark 應用(application)。

一、Spark驅動程式

Spark 驅動器是執行你的程式中的 main() 方法的程序。它執行使用者編寫的用來建立SparkContext、建立 RDD,以及進行 RDD 的轉化操作和行動操作的程式碼。

驅動程式職責

1. 把使用者程式轉為任務

Spark 驅動器程式負責把使用者程式轉為多個物理執行的單元,這些單元也被稱為任務(task)。從上層來看,所有的 Spark 程式都遵循同樣的結構:程式從輸入資料建立一系列 RDD,再使用轉化操作派生出新的 RDD,最後使用行動操作收集或儲存結果 RDD中的資料。Spark 程式其實是隱式地創建出了一個由操作組成的邏輯上的有向無環圖(Directed Acyclic Graph,簡稱 DAG)。當驅動器程式執行時,它會把這個邏輯圖轉為物理執行計劃。

2.為執行器節點排程任務

有了物理執行計劃之後,Spark 驅動器程式必須在各執行器程序間協調任務的排程。執行器程序啟動後,會向驅動器程序註冊自己。因此,驅動器程序始終對應用中所有的執行器節點有完整的記錄。每個執行器節點代表一個能夠處理任務和儲存 RDD某個分片資料的程序。

二、執行器節點

Spark 執行器節點是一種工作程序,負責在 Spark 作業中執行任務,任務間相互獨立。Spark 應用啟動時,執行器節點就被同時啟動,並且始終伴隨著整個 Spark 應用的生命週期而存在。如果有執行器節點發生了異常或崩潰,Spark 應用也可以繼續執行。執行器程序有兩大作用:第一,它們負責執行組成 Spark 應用的任務,並將結果返回給驅動器程序;
第二,它們通過自身的塊管理器(Block Manager)為使用者程式中要求快取的 RDD 提供記憶體式儲存。RDD 是直接快取在執行器程序內的,因此任務可以在執行時充分利用快取資料加速運算。

三、叢集管理器

Spark 依賴於叢集管理器來啟動執行器節點,而在某些特殊情況下,也依賴叢集管理器來啟動驅動器節點。叢集管理器是 Spark 中的可插拔式元件。這樣,除了 Spark 自帶的獨立叢集管理器,Spark 也可以執行在其他外部叢集管理器上,比如 YARN 和 Mesos。