操作场景
Spark系统在运行含shuffle过程的应用时,Executor进程除了运行task,还要负责写shuffle数据,给其他Executor提供shuffle数据。当Executor进程任务过重,导致GC而不能为其他Executor提供shuffle数据时,会影响任务运行。
External shuffle Service是长期存在于NodeManager进程中的一个辅助服务。通过该服务来抓取shuffle数据,减少了Executor的压力,在Executor GC的时候也不会影响其他Executor的任务运行。
操作步骤
1. 在NodeManager中启动External shuffle Service。
a. 在“yarn-site.xml”中添加如下配置项:
<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.shuffle.service.port</name><value>7337</value></property>
b. 添加依赖的jar包。
拷贝“${SPARK_HOME}/lib/spark-1.5.1-yarn-shuffle.jar”到“${HADOOP_HOME}/share/hadoop/yarn/lib/”目录下。
c. 重启NodeManager进程,也就启动了External shuffle Service。
2. Spark应用使用External shuffle Service。
● 在“spark-defaults.conf”中必须添加如下配置项:
spark.shuffle.service.enabled true
spark.shuffle.service.port 7337
注意:
1. 如果 “yarn.nodemanager.aux-services” 配置项已存在,则在 value 中添加 “spark_shuffle”,且用逗号和其他值分开。
2. “spark.shuffle.service.port”的值需要和上面“yarn-site.xml”中的值一样。