Spark调优之Shuffle调优 调节map端内存缓冲和reduce端内存占比

本文探讨了Spark Shuffle过程中map端的`spark.shuffle.file.buffer`参数(默认32kb)和reduce端的`spark.shuffle.memoryFraction`参数(默认0.2)对性能的影响。当内存缓冲不足时,会导致频繁的溢写操作,增加磁盘IO,降低性能。优化策略包括观察Spark UI中shuffle的读写情况,根据数据量调整参数,并注意整体集群资源的平衡。
摘要由CSDN通过智能技术生成

map端内存缓冲: spark.shuffle.file.buffer (map端内存缓冲,默认32kb)
reduce端内存占比: spark.shuffle.memoryFraction (reduce端内存占比,默认0.2,20%)

理论基础和问题背景:

首先需要声明的是,这两个参数会被认为是调节shuffle的不二选择,但事实是调节这两个参数会对shuffle调优有效果,但并不是决定性的。而往往,shuffle的性能也不是这两个参数单方面就能决定的。
在这里插入图片描述
默认情况下,shuffle的map task输出到磁盘文件时,都会统一先写入自己的内存缓冲区,这个缓冲区的默认大小是32k。当每次内存缓冲区满溢后,才会执行spill(溢写)操作,溢写到磁盘。(如上图)

shuffle的reduce task拉取到数据后,用hashmap的数据格式,先汇聚每个key对应的values,再针对每个key的values进行我们自定义的聚合操作。

reduce task在进行聚合操作时,使用的就是reduce task自己对应的executor内存,executor(就是jvm进程)堆内存。 默认executor划分给reduce task聚合的内存比例是0.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值