轉載自:http://blog.sina.com.cn/s/blog_15fc03d810102wto0.html
1.驅動器節點(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 就可以看到這個網頁了。
2.執行器節點(
Executor)
Spark Executor節點是一個工作進程,負責在 Spark 作業中運行任務,任務間相互獨立。Spark 應用啟動時,Executor節點被同時啟動,並且始終伴隨着整個 Spark 應用的生命周期而存在。如果有Executor節點發生了故障或崩潰,Spark 應用也可以繼續執行,會將出錯節點上的任務調度到其他Executor節點上繼續運行。
執行器進程有兩大作用:
1、它們負責運行組成 Spark 應用的任務,並將結果返回給驅動器進程;
2、它們通過自身的塊管理器(Block Manager)為用戶程序中要求緩存的 RDD 提供內存式存儲。RDD 是直接緩存在Executor進程內的,因此任務可以在運行時充分利用緩存數據加速運算。
執行器程序通常都運行在專用的進程中。