Spark叢集模式&Spark程式送出
1. 叢集管理器
Spark目前支援三種叢集管理方式
Standalone—Spark自帶的一種叢集管理方式,易于建構叢集。
Apache Mesos—通用的叢集管理,可以在其上運作Hadoop MapReduce和一些服務應用。
Hadoop YARN—Hadoop2中的資料總管。
Tip1: 在叢集不是特别大,并且沒有mapReduce和Spark同時運作的需求的情況下,用Standalone模式效率最高。
Tip2: Spark可以在應用間(通過叢集管理器)和應用中(如果一個SparkContext中有多項計算任務)進行資源排程。
2. 元件
Spark應用程式在叢集上以一系列程序集合運作,通過程式(driver program)中的SparkContext對象進行卸掉。SparkContext可以與多種叢集管理器(Cluster Manager)相連接配接,這些叢集管理器可以在應用程式間配置設定計算資源。連到叢集管理器後,Spark在急群衆查找executor節點,這些節點執行運算與資料的存儲。使用者的應用程式(以JAR檔案的形式傳給SparkContext)被發送到executors。最後SparkContext發送任務tasks到executors進行執行。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SNxgTZ2IDNygDZzIjYyIWNjljNzgDMmVGZ3QWN3QmNz8CX1AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
Tip1: 每個Executor中以線程池的方式并行運作多個Task。意味着是應用程式之間在排程方面(每個driver排程自身的任務)和執行方面(來自不同的任務在不同的JVM上執行)互相隔離,同時,資料無法在不同的應用程式(SparkContext)之間共享,除非資料被寫入到額外的存儲系統。
Tip2: Spark對于底層叢集管理系統來說是不可知的。隻要它能夠獲得executor程序,并且彼此之間可以進行通信,那麼很容易将其運作在一個同時支援其它應用架構的叢集管理器(Mesos/YARN)上。
Tip3: 由于driver在叢集上排程任務,它所在的節點應該靠近工作節點,最好位于相同的區域網路中。如果想要遠端地向叢集發送請求,最好是為driver開啟RPC,以是的就近送出操作而不是在一個距離工作節點很遠的位置啟動driver。
3. 送出應用程式
使用Spark的bin目錄中的spark-submit腳本向叢集中送出應用程式。該腳本不論cluster managers有何差異,送出作業時都有相同的接口,不必單獨配置。
4. 使用spark-submit送出任務
打包好應用程式後,可以使用bin/spark-submit腳本送出應用程式。該腳本負責所需類路徑(classpath)以及依賴,該腳本可以用于所有Spark支援的叢集部署模式。
常用的選項:
--class: 應用程式(application)入口
--master: 叢集中master節點的URL(e.g. spark://23.195.26.187:7077)
--deploy-mode: 是否将driver部署到worker節點(cluster模式)或者将driver作為一個外部的client(client模式)
application-jar:打包的包含相關依賴的jar檔案的路徑。該位址應該對叢集可見,例如hdfs://或者file://位址。
Application-arguments:傳送給應用程式main函數的參數。
Tip1: 在一個與worker機器實體上相近的機器上送出應用程式(例如Standalone模式時EC2叢集上的master節點),這種情況client模式更合适。Client模式下,driver直接在spark-submit程式中啟動,應用程式相關的輸入輸出與所在的console相聯系。Client模式同樣适用spark-shell中的應用程式。
Tip2: 如果一個應用程式在與那裡worker叢集的節點上送出(例如本地的筆記本),此時适合使用cluster模式減少driver和executer之間的網絡延時。注意,目前cluster模式不适用于standalone叢集,Mesos叢集或Python程式。
Tip3: 可以使用 –help 選項檢視spark-submit支援的所有選項。
以下示例給出常用選項:
5. 監控
每個driver程式均有一個Web界面,通常運作在4040端口,将會顯示正在運作的任務的資訊,executors及存儲的相關資訊。通過使用http://<driver-node>:4040進行通路。
6. Master位址
傳送到Spark的master的位址可以使用如下格式: