aux shuffle
aux shuffle简称ess,作用是将map 的task任务执行的逻辑交给 由yarn nodemanger单独启动的服务进行shuffle,这样能提高工作效率。因为map在发送数据后就不再占用yarn 的资源,reduce等待es sshuffle结束执行,提高任务执行效率;
yanr aux shuffle的作用是在启动nodemanager 进程时,将配置的额外服务启动。该服务需要重写yarn 的org.apache.hadoop.yarn.server.api.AuxiliaryService类,这个类提供自定义shuffle的能力。
优点:
- 1,提高资源利用率,
- 2,增加动态资源调度的弹性,避免开启了动态资源调度时,因为shuffle数据的占用,导致executor无法回收的问题,或者因为executor被回收了,造成shuffle数据被销毁,从而触发该子任务的重算流程
- 3,减少executor内部之间网络带宽和本地带宽的占用
spark-shuffle开启
1. 添加包
将spark-network-shuffle_2.11-2.2.0.jar批量添加到nodemanager节点上/opt/hadoop/share/hadoop/yarn/lib
2.修改配置
yarn.nodemanager.aux-services=spark_shuffle,mapreduce_shuffle
yarn.nodemanager.aux-services.spark_shuffle.class=org.apache.spark.network.yarn.YarnShuffleService
spark.shuffle.service.port=7337
mapreduce.shuffle.port=xxxx;
yarn.nodemanager.aux-services.mapreduce_shuffle.class=xxxxx;
备注说明: shuffle定义的名字无关紧要,主要是端口,框架在执行shuffle时如果开启了ess 则会直接链接rpc端口拿取对应数据执行后续过程
3. 滚动重启nodemanager
4. 修改spark client 配置
spark.shuffle.service.enabled true
spark.shuffle.service.port 7337