在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

 

posted @ 2015-08-01 20:35  孟尧  阅读(711)  评论(0编辑  收藏  举报