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

雖然目前大多數平臺內置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了。

發佈了207 篇原創文章 · 獲贊 67 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章