1. 程式人生 > >spark executor-cores引數並未對vcores生效的原因分析

spark executor-cores引數並未對vcores生效的原因分析

轉載來自:http://blog.csdn.net/rongyongfeikai2/article/details/53187421

https://blog.csdn.net/qq_35440040/article/details/78963722

 

雖然目前大多數平臺內建Application在提交時,只配置了–num-executors和–executor-memory引數,但是其他APP的開發者可能會配置–executor-cores引數。

舉個例子:

./spark-submit –master yarn-client –executor-cores 4 –num-executors 6  –executor-memory 10g –driver-memory 2g –class xxxApp xxJar  –jars $SPARK_HOME/lib/postgresql-9.4-1201.jdbc41.jar

即有6個executor,每個executor的cores數目為4。不過當你提交任務時,你一定會非常吃驚,因為yarn 8088上展示的vcores會是7。看起來就像是引數設定並未生效一樣。

其實這是因為我們的capacity schedule使用的是DefaultResourceCalculator,那麼DefaultResourceCalculator它在載入container時其實僅僅只會考慮記憶體而不考慮cores。所以,如果我們想讓它既考慮記憶體也考慮cores的話,需要將$HADOOP_HOME/etc/hadoop/capacity-scheduler.xml

中的:

<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
</property>

修改為:

<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>

請注意每個節點的配置檔案都需要修改。並且重啟hadoop。

這是再提交spark application,vcores use的數目就對了。

25=4*6+1

另外,如果不期望在命令中寫executor-cores引數,可以在$SPARK_HOME/conf/spark-env.sh裡配置:

export SPARK_EXECUTOR_CORES=4

這樣預設executor-cores就為4了。

注意:以上的一切配置都是基於capacity排程器進行配置的,但是如果你使用的是fair排程器,那麼無需配置該引數,fair排程器已經有該功能。