天天看點

Spark叢集模式&Spark程式送出

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進行執行。

Spark叢集模式&Spark程式送出

      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支援的叢集部署模式。

Spark叢集模式&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支援的所有選項。

以下示例給出常用選項:

Spark叢集模式&Spark程式送出

5. 監控

      每個driver程式均有一個Web界面,通常運作在4040端口,将會顯示正在運作的任務的資訊,executors及存儲的相關資訊。通過使用http://<driver-node>:4040進行通路。

6. Master位址

      傳送到Spark的master的位址可以使用如下格式:                   

7. 讀取配置優先級

繼續閱讀