1. 程式人生 > >spark的Driver節點和Executor節點

spark的Driver節點和Executor節點

一、驅動器節點(Driver)

     Spark的驅動器是執行開發程式中的 main方法的程序。它負責開發人員編寫的用來建立SparkContext、建立 RDD,以及進行 RDD 的轉化操作和行動操作程式碼的執行。如果你是用spark shell,那麼當你啟動 Spark shell的時候,系統後臺自啟了一個 Spark 驅動器程式,就是在Spark shell 中預載入的一個叫作 sc 的 SparkContext 物件。如果驅動器程式終止,那麼Spark 應用也就結束了。

Driver在spark作業執行時主要負責以下操作:

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

Driver程式負責把使用者程式轉為多個物理執行的單元,這些單元也被稱為任務(task)。從上層來看,spark程式的流程是這樣的:讀取或者轉化資料建立一系列 RDD,然後使用轉化操作生成新的RDD,最後使用行動操作得到結果或者將資料儲存到檔案儲存系統中。Spark 程式其實是隱式地創建出了一個由上述操作組成的邏輯上的有向無環圖。當Driver序執行時,它會把這個邏輯圖轉為物理執行計劃。

Spark 會對邏輯執行計劃作一些優化,比如將連續的對映轉為流水線化執行,將多個操作合併到一個步驟中等。這樣 Spark 就把邏輯計劃轉為一系列步驟(stage)。而每個stage又由多個task組成。這些task會被打包並送到叢集中。task是 Spark 中最小的執行單元,使用者程式通常要啟動成百上千的獨立任務。

2)跟蹤Executor的執行狀況

有了物理執行計劃之後,Driver程式必須在各個Executor程序間協調任務的排程。Executor程序啟動後,會向Driver程序註冊自己。因此,Driver程序就可以跟蹤應用中所有的Executor節點的執行資訊。

3)為執行器節點排程任務

Driver程式會根據當前的Executor節點集合,嘗試把所有Task基於資料所在位置分配給合適的Executor程序。當Task執行時,Executor程序會把快取資料儲存起來,而Driver程序同樣會跟蹤這些快取資料的位置,並且利用這些位置資訊來排程以後的任務,以儘量減少資料的網路傳輸。

4)UI展示應用執行狀況

Driver程式會將一些 Spark 應用的執行時的資訊通過網頁介面呈現出來,預設在埠4040 上。比如,在本地模式下,訪問 http://localhost:4040 就可以看到這個網頁了。

二、執行器節點(Executor)

     Spark Executor節點是一個工作程序,負責在 Spark 作業中執行任務,任務間相互獨立。Spark 應用啟動時,Executor節點被同時啟動,並且始終伴隨著整個 Spark 應用的生命週期而存在。如果有Executor節點發生了故障或崩潰,Spark 應用也可以繼續執行,會將出錯節點上的任務排程到其他Executor節點上繼續執行。

執行器程序有兩大作用:

1、它們負責執行組成 Spark 應用的任務,並將結果返回給驅動器程序;

2、它們通過自身的塊管理器(Block Manager)為使用者程式中要求快取的 RDD 提供記憶體式儲存。RDD 是直接快取在Executor程序內的,因此任務可以在執行時充分利用快取資料加速運算。

執行器程式通常都執行在專用的程序中。