1、Shuffle Service介绍
Shuffle描述着数据从map task输出到reduce
task输入的这段过程。shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。因为在分布式情况下,reduce
task需要跨节点去拉取其它节点上的map
task结果。这一过程将会产生网络资源消耗和内存,磁盘IO的消耗。通常shuffle分为两部分:Map阶段的数据准备和Reduce阶段的数据拷贝处理。一般将在map端的Shuffle称之为Shuffle
Write,在Reduce端的Shuffle称之为Shuffle Read
2、编写配置文件/data/hadoop/etc/hadoop/yarn-site.xml并分发到所有hadoop节点
vi /data/hadoop/etc/hadoop/yarn-site.xml
修改如下:
<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>
<property>
<name>spark.shuffle.service.port</name>
<value>7337</value>
</property
注:如果不使用MapReduce,yarn.nodemanager.aux-services中只填写spark_shuffle即可
3、复制spark_shuffle jar包到yarn下(所有hadoop节点上执行)
cp /data/spark/yarn/spark-2.4.8-yarn-shuffle.jar /data/hadoop/share/hadoop/yarn/lib/
4、配置spark 客户端文件spark-defaults.conf(所有hadoop节点上进行)
cp /data/spark/conf/spark-defaults.conf.template /data/spark/conf/spark-defaults.conf
vi /data/spark/conf/spark-defaults.conf
添加如下
spark.shuffle.service.enabled true
spark.shuffle.service.port 7337
5、重启yarn集群
停止集群:
主节点:
stop-yarn.sh
备用节点:
yarn-daemon.sh stop resourcemanager
启动集群:
主节点:
start-yarn.sh
备用节点:
yarn-daemon.sh start resourcemanager