Spark参数调优

本文深入探讨了Spark参数调优,重点在于理解并优化executor内存、GC行为以及Direct Memory。详细解析了`spark.executor.memory`、`yarn.scheduler.maximum-allocation-mb`、`spark.yarn.executor.memoryOverhead`和`-XX:MaxDirectMemorySize`等关键参数,通过调整这些参数,以避免`Direct buffer memory` OOM问题,同时介绍了如何通过设置GC策略来改善性能。此外,还强调了Stage、Cache和Partition的基础优化方法,以提高Spark作业的效率。

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

请带着下面的疑问读本博客,如果可以了解,请绕行别处!!!

下面4个参数代表什么意思,相互之间什么关系?

1.spark.executor.memory
2.yarn.scheduler.maximum-allocation-mb
3.spark.yarn.executor.memoryOverhead
4.spark.executor.extraJavaOptions  -XX:MaxDirectMemorySize

==========================================================================================

参考:

https://blog.youkuaiyun.com/wisgood/article/details/77857039

https://my.oschina.net/u/658658/blog/654558

 

1、参数说明:

1.1 yarn.scheduler.maximum-allocation-mb
这个参数表示每个container能够申请到的最大内存,一般是集群统一配置。Spark中的executor进程是跑在container中,所以container的最大内存会直接影响到executor的最大可用内存。当你设置一个比较大的内存时,日志中会报错,同时会打印这个参数的值。如下图 ,6144MB,即6G。 

è¿éåå¾çæè¿°

1.2 spark.yarn.executor.memoryOverhead
executor执行的时候,用的内存可能会超过executor-memoy,所以会为executor额外预留一部分内存。spark.yarn.executor.memoryOverhead代表了这部分内存。这个参数如果没有设置,会有一个自动计算公式(位于ClientArguments.scala中),代码如下: 

è¿éåå¾çæè¿°

其中,MEMORY_OVERHEAD_FACTOR默认为0.1,executorMemory为设置的executor-memory, MEMORY_OVERHEAD_MIN默认为384m。参数MEMORY_OVERHEAD_FACTOR和MEMORY_OVERHEAD_MIN一般不能直接修改,是Spark代码中直接写死的。

1.3 spark.yarn.executor.memoryOverhead

我们使用的spark版本是1.5.2(更准确的说是1.5.3-shapshot),shuffle过程中block的传输使用netty(spark.shuffle.blockTransferService)。基于netty的shuffle,使用direct memory存进行buffer(spark.shuffle.io.preferDirectBufs),所以在大数据量shuffle时,堆外内存使用较多。当然,也可以使用传统的nio方式处理shuffle,但是此方式在spark 1.5版本设置为deprecated,并将会在1.6版本彻底移除,所以我最终还是采用了netty的shuffle。

jvm关于堆外内存的配置相对较少,通过-XX:MaxDirectMemorySize可以指定最大的direct memory。默认如果不设置,则与最大堆内存相同。

Direct Memory是受GC控制的,例如ByteBuffer bb = ByteBuffer.allocateDirect(1024),这段代码的执行会在堆外占用1k的内存,Java堆内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值