在YARN集群中启用Spark ExternalShuffleService服务
Spark在运行含shuffle过程的应用时,Executor进程除了运行task,还要负责写shuffle数据并未其他Executor提供shuffle数据。当Executor进程任务负载过重而宕掉时就会影响到任务运行。因此,Spark提供了一个叫做ExternalShuffleService的实现,它可以作为资源管理器(如NodeManager)中的一个辅助服务(一个线程)来长期运行,应用程序可以通过该服务来获取shuffle数据,这样一来,即实现了功能上的解耦,又可以降低Executor的压力。在YARN中启用ExternalShuffleService的配置如下:
1、在NodeManager中启动ExternalShuffleService(配置yarn-site.xml,需重启Yarn)
<property> <name>yarn.nodemanager.aux-services</name> <value>spark_shuffle</value> <description>NodeManager中一个长期运行的辅助服务,用于提升Shuffle计算性能。</description> </property> <property> <name>yarn.nodemanager.aux-services.spark_shuffle.class</name> <value>org.apache.spark.network.yarn.YarnShuffleService</value> <description>NodeManager中辅助服务对应的类。</description> </property>
2、添加依赖的jar包
cp $SPARK_HOME/yarn/spark-2.4.7-yarn-shuffle.jar $HADOOP_HOME/share/hadoop/yarn/
3、Spark客户端配置
# NodeManager中一个长期运行的辅助服务,用于提升Shuffle计算性能。默认为false表示不启用该功能 spark.shuffle.service.enabled=true # Shuffle服务监听数据获取请求的端口,默认为7337 spark.shuffle.service.port=7337