1. 程式人生 > >spark的幾種模式的比較

spark的幾種模式的比較

在spark的學習中,spark一共有四種模式,分別是:

spark基於local

spark基於standalone

spark基於yarn

spark基於metsos

 

  1. Standalone模式兩種提交任務方式
  1. Standalone-client提交任務方式
  • 提交命令

./spark-submit

--master spark://node1:7077

--class org.apache.spark.examples.SparkPi

../lib/spark-examples-1.6.0-hadoop2.6.0.jar

1000

或者

./spark-submit

--master spark://node1:7077

--deploy-mode client

--class org.apache.spark.examples.SparkPi

../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

  • 執行原理圖解

 

  • 執行流程
  1. client模式提交任務後,會在客戶端啟動Driver程序。
  2. Driver會向Master申請啟動Application啟動的資源。
  3. 資源申請成功,Driver端將task傳送到worker端執行。
  4. worker將task執行結果返回到Driver端。
  • 總結

client模式適用於測試除錯程式。Driver程序是在客戶端啟動的,這裡的客戶端就是指提交應用程式的當前節點。在Driver端可以看到task執行的情況。生產環境下不能使用client模式,是因為:假設要提交100個application到叢集執行,Driver每次都會在client端啟動,那麼就會導致客戶端100次網絡卡流量暴增的問題。

  1. Standalone-cluster提交任務方式
  • 提交命令

./spark-submit

--master spark://node1:7077

--deploy-mode cluster

--class org.apache.spark.examples.SparkPi

../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

  • 執行原理圖解

 

  • 執行流程
  1. cluster模式提交應用程式後,會向Master請求啟動Driver.
  2. Master接受請求,隨機在叢集一臺節點啟動Driver程序。
  3. Driver啟動後為當前的應用程式申請資源。
  4. Driver端傳送task到worker節點上執行。
  5. worker將執行情況和執行結果返回給Driver端。
  • 總結

Driver程序是在叢集某一臺Worker上啟動的,在客戶端是無法檢視task的執行情況的。假設要提交100個application到叢集執行,每次Driver會隨機在叢集中某一臺Worker上啟動,那麼這100次網絡卡流量暴增的問題就散佈在叢集上。

  • 總結Standalone兩種方式提交任務,Driver與叢集的通訊包括:

1. Driver負責應用程式資源的申請

2. 任務的分發。

3. 結果的回收。

4. 監控task執行情況。

spark 基於yarn模式提交任務

  1. Yarn模式兩種提交任務方式
  1. yarn-client提交任務方式
  • 提交命令

./spark-submit

--master yarn

 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

或者

./spark-submit

--master yarn–client

 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

 

或者

./spark-submit

--master yarn

--deploy-mode  client

 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

 

  • 執行原理圖解

 

  • 執行流程
  1. 客戶端提交一個Application,在客戶端啟動一個Driver程序。
  2. 應用程式啟動後會向RS(ResourceManager)傳送請求,啟動AM(ApplicationMaster)的資源。
  3. RS收到請求,隨機選擇一臺NM(NodeManager)啟動AM。這裡的NM相當於Standalone中的Worker節點。
  4. AM啟動後,會向RS請求一批container資源,用於啟動Executor.
  5. RS會找到一批NM返回給AM,用於啟動Executor。
  6. AM會向NM傳送命令啟動Executor。
  7. Executor啟動後,會反向註冊給Driver,Driver傳送task到Executor,執行情況和結果返回給Driver端。
  • 總結

Yarn-client模式同樣是適用於測試,因為Driver執行在本地,Driver會與yarn叢集中的Executor進行大量的通訊,會造成客戶機網絡卡流量的大量增加.

  • ApplicationMaster的作用:
  1. 為當前的Application申請資源
  2. 給NameNode傳送訊息啟動Executor。

注意:ApplicationMaster有launchExecutor和申請資源的功能,並沒有作業排程的功能。

  1. yarn-cluster提交任務方式
  • 提交命令

./spark-submit

--master yarn

--deploy-mode cluster 

--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

或者

./spark-submit

--master yarn-cluster

--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

 

  • 執行原理圖解

  • 執行流程
  1. 客戶機提交Application應用程式,傳送請求到RS(ResourceManager),請求啟動AM(ApplicationMaster)。
  2. RS收到請求後隨機在一臺NM(NodeManager)上啟動AM(相當於Driver端)。
  3. AM啟動,AM傳送請求到RS,請求一批container用於啟動Executor。
  4. RS返回一批NM節點給AM。
  5. AM連線到NM,傳送請求到NM啟動Executor。
  6. Executor反向註冊到AM所在的節點的Driver。Driver傳送task到Executor。
  • 總結

Yarn-Cluster主要用於生產環境中,因為Driver執行在Yarn叢集中某一臺nodeManager中,每次提交任務的Driver所在的機器都是隨機的,不會產生某一臺機器網絡卡流量激增的現象,缺點是任務提交後不能看到日誌。只能通過yarn檢視日誌。

  • ApplicationMaster的作用:
  1. 為當前的Application申請資源
  2. 給NameNode傳送訊息啟動Excutor。
  3. 任務排程。
  • 停止叢集任務命令:yarn application -kill applicationID