1. 程式人生 > >Learning Spark——client mode和cluster mode的區別

Learning Spark——client mode和cluster mode的區別

在使用spark-submit提交Spark任務一般有以下引數:

./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

其中deploy-mode是針對叢集而言的,是指叢集部署的模式,根據Driver主程序放在哪分為兩種方式:client和cluster,預設是client,下面我們就詳細研究一下這兩種模式的區別

1. client mode

這裡寫圖片描述

首先明白幾個基本概念:Master節點就是你用來提交任務,即執行bin/spark-submit命令所在的那個節點;Driver程序就是開始執行你Spark程式的那個Main函式,雖然我這裡邊畫的Driver程序在Master節點上,但注意Driver程序不一定在Master節點上,它可以在任何節點;Worker就是Slave節點,Executor程序必然在Worker節點上,用來進行實際的計算

1、client mode下Driver程序執行在Master節點上,不在Worker節點上,所以相對於參與實際計算的Worker叢集而言,Driver就相當於是一個第三方的“client”

2、正由於Driver程序不在Worker節點上,所以其是獨立的,不會消耗Worker叢集的資源

3、client mode下Master和Worker節點必須處於同一片區域網內,因為Drive要和Executorr通訊,例如Drive需要將Jar包通過Netty HTTP分發到Executor,Driver要給Executor分配任務等

4、client mode下沒有監督重啟機制,Driver程序如果掛了,需要額外的程式重啟

2. cluster mode

這裡寫圖片描述

1、Driver程式在worker叢集中某個節點,而非Master節點,但是這個節點由Master指定

2、Driver程式佔據Worker的資源

3、cluster mode下Master可以使用–supervise對Driver進行監控,如果Driver掛了可以自動重啟

4、cluster mode下Master節點和Worker節點一般不在同一區域網,因此就無法將Jar包分發到各個Worker,所以cluster mode要求必須提前把Jar包放到各個Worker幾點對應的目錄下面

3. 總結

是選擇client mode還是cluster mode呢?

一般來說,如果提交任務的節點(即Master)和Worker叢集在同一個網路內,此時client mode比較合適

如果提交任務的節點和Worker叢集相隔比較遠,就會採用cluster mode來最小化Driver和Executor之間的網路延遲

Refer