Spark on YARN动态资源配置

字数 339阅读 651

Spark中,所谓资源单位一般指的是executors,和Yarn中的Containers一样,在Spark On Yarn模式下,通常使用–num-executors来指定Application使用的executors数量,而–executor-memory和–executor-cores分别用来指定每个executor所使用的内存和虚拟CPU核数。
其实从Spark1.2之后,对于On Yarn模式,已经支持动态资源分配(Dynamic Resource Allocation),这样,就可以根据Application的负载(Task情况),动态的增加和减少executors。
大体按照以下步骤进行相关配置
参考Spark官方文档 外部shuffle服务配置https://spark.apache.org/docs/latest/running-on-yarn.html#configuring-the-external-shuffle-service

环境基本信息
$HADOOP_HOME = /usr/hadoop
$SPARK_HOME = $HADOOP_HOME/spark
spark版本2.1.0
1.将spark目录下的spark-<version>-yarn-shuffle.jar($SPARK_HOME/yarn/spark-2.1.0-yarn-shuffle.jar)copy到hadoop集群的所有节点中,我们环境的对应目录为$HADOOP_HOME、yarn/lib/
2.修改YARN NodeManger配置yarn-site.xml,并copy至各个节点
add spark_shuffle to yarn.nodemanager.aux-services
set yarn.nodemanager.aux-services.spark_shuffle.class to org.apache.spark.network.yarn.YarnShuffleService.

...
<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.通过在$HADOOP_HOME/etc/hadoop /yarn-env.sh中设置YARN_HEAPSIZE(默认为1000)来增加NodeManager的堆大小,以避免shuffle期间的垃圾回收问题。

4.重启集群所有NodeManager

5.配置spark-defaults.conf

spark.shuffle.service.enabled           true
spark.dynamicAllocation.enabled         true
spark.dynamicAllocation.minExecutors    1
spark.dynamicAllocation.maxExecutors    20
spark.shuffle.service.enabled           true

推荐阅读更多精彩内容