1.简介
前段时间仓库间推广spark-sql时,生产环境已经应用了spark dynamic resource allocation特性,即可动态的资源分配,这里的动态和资源分配是指executor级的,我们知道spark的资源分配是比较coarse-grained的,一个spark作业不同stage之间task数量有时差异比较大,特别是最后stage的时候,有些作业数据稍微倾斜一下,那就有大量的executor是在空闲状态,造成集群资源的极大浪费,通过动态资源分配,已经空闲的executor,如果超过了timeout时间,即可回收资源,而不是继续占用资源;
2.DRA配置安装
可参照官网http://spark.apache.org/docs/1.6.3/job-scheduling.html#dynamic-resource-allocation
1.首先找到spark版本的spark-<version>-yarn-shuffle.jar shuffle包,并将该包放到集群所有NodeManager的classpath下,比如放到HADOOP_HOME/share/hadoop/yarn/lib
2.在所有节点的yarn-site.xml中NodeManager上运行的附属服务中加入spark_shuffle及对应的class类,如下:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle,spark_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
3.重启所有的Nodemanager
即可配置安装好spark的动态资源的分配;
3.spark作业配置