Spark On Yarn External Shuffle Service

本文基于spark-3.1.2-bin-without-hadoop.tgz版本,所以spark-3.1.2-yarn-shuffle.jar已经在节点的${SPARK_HOME}/yarn目录下。

HADOOP_CLASSPATH

在所有NodeManager节点上设置环境变量:

1
export HADOOP_CLASSPATH=${SPARK_HOME}/yarn/spark-3.1.2-yarn-shuffle.jar:$HADOOP_CLASSPATH

yarn-site.xml

在yarn-site.xml中添加以下配置,并分发至所有NodeManager节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- Spark Configuration -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>spark_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>
<name>spark.yarn.shuffle.stopOnFailure</name>
<value>true</value>
</property>

重启NodeManager

1
2
yarn --daemon stop nodemanager
yarn --daemon start nodemanager

检查

在NodeManager节点上使用以下命令查看7337端口是否已被监听:

1
netstat -ntlp|grep 7337

该端口通过spark.shuffle.service.port指定,默认是7337。

启用

在${SPARK_HOME}/conf/spark-defaults.conf中添加以下配置,并分发至所有节点。

1
spark.shuffle.service.enabled true