Spark GC 调优

针对Spark环境中task的长时间GC问题,通过调整垃圾收集器为G1或Parallel进行优化。在Heap大于32G时推荐使用G1,避免Humongous对象分配问题。若出现Executor异常退出,可通过减少cores或增加老年代内存解决。测试结果显示,从CMS切换到G1后,处理124G数据的时间从34分钟降至23分钟,性能显著提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们的Spark环境目前主要问题是数据量大后一些task的GC Time 特别长,多则几分钟,少则几十秒,实在不能忍受。参考databricks的Tuning Java Garbage Collection for Spark Applications对我们的环境优化后,效果比较明显。

选择垃圾收集器

如果分配给单个Executor的Heap足够大(我认为超过32G)时使用G1,否则使用Parallel。因为如果在Heap小于32G时使用G1,G1 region size默认小于16M,可能引发Humongous对象分配问题。
当然,使用G1可能也可能引起Executor异常退出,这时有两种解决方法:
1. 减少cores数量(就是减少当前Executor并行task的数量)
2. 增加老年代内存

测试验证

硬件环境:(64G+8cores+42T) * 4,用yarn管理,利用Spark SQL对124G,169个字段的数据用row_number函数除重,除重前1.6亿条,除重后1.5亿条:

executor-memory executor-cores extraJavaOptions Max GC Time Job Duration
20g 10 -XX:+UseG1GC 60s 32min
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值