ESS(EMR Remote Shuffle Service)是EMR
在优化计算引擎的Shuffle
操作上,推出的扩展组件。
目前Shuffle
方案缺点如下:
Shuffle Write
在大数据量场景下会溢出,导致写放大。Shuffle Read
过程中有大量的网络小包导致Connection reset
问题。Shuffle Read
过程中存在大量小数据量的IO请求和随机读,对磁盘和CPU造成高负载。M*N次
的连接数,在M和N数千的规模下,作业基本无法完成。NodeManager和Spark Shuffle Service
是同一进程,当Shuffle
的数据量特别大时,通常会导致NodeManager
重启,从而影响YARN
调度的稳定性。EMR推出的基于Shuffle的ESS
服务,可以优化目前方案的问题。优势如下:
Push-Style Shuffle
代替Pull-Style
,减少Mapper
的内存压力。IO
聚合,Shuffle Read
的连接数从M*N降到N
,同时更改随机读为顺序读。Fetch Fail
概率。Shuffle Service
至特殊硬件环境中,与计算集群分离。Spark on Kubernetes
时对本地磁盘的依赖。image.png
Spark使用ESS时,只需在提交Spark作业时添加如下两个配置项
spark.shuffle.manager org.apache.spark.shuffle.ess.EssShuffleManager 固定值
spark.ess.master.address <ess-master-ip>:<ess-master-port>