Spark on yarn 的兩種模式不同之處(spark on yarn的內存分配)

Spark on yarn 的兩種模式不同之處:

1.進程名字不同

Cluster模式:

CoarseGrainedExecutorBackend : 幹活的程序員

ApplicationMaster:  程序的主控進程  driver就運行在該進程中

 

Client 模式:

SparkSubmit

CoarseGrainedExecutorBackend : 幹活的程序員

ExecutorLauncher:   管理executor

 

  1. 提交命令的不同

spark2.x:

Client模式:

spark-submit --master yarn  --deploy-mode  client

Cluster模式:

spark-submit --master yarn  --deploy-mode  cluster

 

補充:spark1.x的提交命令:

spark-submit --master yarn-client

spark-submit --master yarn-cluster

 

 

  1. driver運行的位置不同

Cluster模式:

driver運行在yarn的一個nodemanager中,driver掛掉還能在其他nodemanager中啓動。

Client模式:

driver運行在客戶端窗口,客戶端掛掉,程序將掛掉不會重啓。

 

  1. 資源分配的進程不同

Cluster模式:

ApplicationMaster進程進行資源分配和executor的啓動。

Client模式:
ExecutorLauncher進程進行資源分配和executor的啓動。

 

                              圖1.各個集羣模式下的進程對比

 

  1. 提交命令不同

Spark on yarn的cluster的提交命令:

spark-submit \

--driver-memory 512m \        #applicationMaster所在容器的內存

--driver-cores 2 \              #applicationMaster所在容器的核數

--executor-cores 2 \            #executor所在容器的核數

--executor-memory 2g \

--num-executors 10000 \        #最多能啓動的executor數量

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

--master yarn \

--deploy-mode cluster \

 /root/apps/spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 10000

Spark on yarn的client的提交命令:

spark-submit \

--conf spark.yarn.am.memory=1g \    #ExecutorLauncher所在容器的內存

--conf spark.yarn.am.cores=3 \      #ExecutorLauncher所在容器的核數

--executor-cores 2 \

--executor-memory 2g \

--num-executors 10000 \

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

--master yarn \

--deploy-mode client\

 /root/apps/spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 10000

 

6.yarn的資源分配不一樣

Spark on yarn的資源分配:

但每一個executor真正申請的資源數量是:是由 –executor-memory 和spark.yarn.executor.memoryOverhead共同決定的。

memoryOverhead=384MB 

每個executor要分配的堆外內存量。這個內存,可以解決諸如VM開銷,其他本機開銷等問題。

spark.yarn.executor.memoryOverhead的值,是參數分配值的0.1倍,最少384MB。

每一個executor的資源是max((--executor-memory)*0.1,384)+(--executor-memory),

因爲最終是要提交到yarn的container中,所以最終要聽從yarn的管理。

Yarn中有個最小 yarn.scheduler.minimum-allocation-mb 參數爲1024mb

(參考:

http://hadoop.apache.org/docs/r2.8.4/hadoop-yarn/hadoop-yarn-common/yarn-default.xml)

因爲每一個container實際消耗的內存爲1024的整數倍;

所以每一個executor的內存實際爲:

注意:如果默認的yarn最小資源改變則此處以下的1024都要改成自己設置的參數。

ceil( (  max((--executor-memory)*0.1,384)+(--executor-memory)   )/1024)*1024

Cluster模式:

Driver端使用的內存資源:

driver=ceil(((driver-memory *0.1 >384? driver-memory *0.1:384)+driver-memory)/1024)*1024

executor端使用的內存資源:

executor=ceil(((executor-memory *0.1 >384? executor-memory *0.1:384)+executor-memory)/1024)*1024*(實際啓動的executor個數)

 

總消耗 sum_memory=driver+exector

 

Client模式:

Driver端使用的內存資源:

driver=ceil(((spark.yarn.am.memory *0.1 >384? spark.yarn.am.memory *0.1:384)+spark.yarn.am.memory)/1024)*1024

executor端使用的內存資源:

executor=ceil(((executor-memory *0.1 >384? executor-memory *0.1:384)+executor-memory)/1024)*1024*(實際啓動的executor個數)

 

總消耗 sum_memory=driver+exector

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                            補充:圖2.spark on yarn 查看監控界面

 

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