spark部署方式之client 和cluster的區別

在使用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

1

首先明白幾個基本概念: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

2

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之間的網絡延遲

yarn client模式:driverzai當前提交任務的節點上,可以打印任務運行的日誌信息,而 

yarn cluster模式:driver在AppMaster所有節點上,分佈式分配,不能再提交任務的本機打印日誌信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章