spark.executor.memoryOverhead

前言

本文隶属于专栏《Spark 配置参数详解》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见 Spark 配置参数详解

正文

spark.executor.memoryOverhead

注意: Spark 2.3 前,这个参数名为:spark.yarn.executor.memoryOverhead

在 YARN,K8S 部署模式下,container 会预留一部分内存,形式是堆外,用来保证稳定性,主要存储nio buffer,函数栈等一些开销

这部分内存,你不用管堆外还是堆内,开发者用不到,spark也用不到,

所以不用关心,千万不指望调这个参数去提升性能,它的目的是保持运行时的稳定性

内存设置

可以参考下图了解 YARN Container 和 Executor 是如何在内存中设置的:

在这里插入图片描述

Spark Executor 使用的内存已超过预定义的限制(通常由个别的高峰期导致的),这导致 YARN 使用前面提到的消息错误杀死 Container。

默认

默认情况下,“spark.executor.memoryOverhead”参数设置为 384 MB。

根据应用程序和数据负载的不同,此值可能较低。

此参数的建议值为“executorMemory * 0.10”。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: spark.executor.memoryOverheadSpark中的一个参数,用于控制每个Executor进程的内存使用情况。它表示Executor进程在使用内存时,需要额外预留的内存量。这个参数的默认值是executorMemory * .10,也就是Executor进程的内存总量的10%。如果Executor进程的内存使用量超过了这个值,就会触发内存溢出错误。因此,如果你的Spark应用程序需要处理大量数据,就需要根据实际情况来调整这个参数的值,以保证程序的稳定性和性能。 ### 回答2: spark.executor.memoryOverheadspark默认配置中的一个参数,它用来控制每个executor进程额外需要的内存量,这个内存量用于非堆内存(off-heap memory)的使用,如网络缓存、JVM元数据等。 对于executor进程,它们的内存是由两个部分组成的:堆内存和非堆内存。堆内存主要用来存储业务数据和栈内存,而非堆内存则用来存储JVM元数据、线程栈、socket连接等。为了保障executor进程的正常运行,非堆内存的大小需要额外配置。 根据spark的默认配置,spark.executor.memoryOverhead的值等于executor内存的10%或384 MB(以两者中的较大者为准)。 如果executor的内存设置为2 GB,那么其memoryOverhead默认为384 MB,此时executor进程能够使用的非堆内存大小就是384 MB。如果需要调整spark.executor.memoryOverhead的大小,则需要根据实际场景进行调整。如果executor进程的非堆内存不足以支持某些非常规操作,如大规模的广播变量、多级aggregation等,则需要增加executormemoryOverhead值。 在设置spark.executor.memoryOverhead时,需要注意两点:第一,memoryOverhead值不能超过executor内存的50%;第二,memoryOverhead过大也会影响executor进程的性能。 总的来说,spark.executor.memoryOverheadspark中一个很重要的参数,在调优时需要结合业务场景来进行设置,以保证executor进程能够正常运行并获得最佳性能。 ### 回答3: Spark.executor.memoryOverheadSpark作业运行过程中与内存有关的一个参数。作业执行期间会有一部分内存用来存储数据结构等信息,而executor.memoryOverhead就是用来设置这一内存的大小。 默认情况下,executor.memoryOverhead的值是executor的内存数目的10%,但这个百分比并不一定适用于所有的作业。在实际运行过程中,如果程序发生OutOfMemoryError或executor内存与操作系统进行swapping(虚拟内存),应该考虑调整executor.memoryOverhead参数的大小。通常来说,增加executor.memoryOverhead的数值可以帮助解决内存不足的问题,但同时也会影响到executor的可用内存。 调整executor.memoryOverhead的大小,需要根据具体的作业和集群来进行。一般来说,可以根据如下的步骤来设置该参数: 1. 观察Spark作业运行时的内存使用情况,如果出现OutOfMemoryError等内存不足的情况,应该考虑增加executor.memoryOverhead的数值。 2. 计算出例如下面的公式: executor.memoryOverhead = max(executor.memory * 0.1, 384MB) 这个公式是Sparkexecutor.memoryOverhead的默认值,其中max()函数所得到的结果是executor.memory的10%和384MB两个数值中的最大值。这个公式可以作为调整executor.memoryOverhead数值的参考,可以将其中的0.1和384MB根据实际情况进行调整。 3. 对于不同的作业和集群,可能需要进行不同的调整。调整executor.memoryOverhead数值的过程可能需要进行多次试验,通过观察内存使用情况来确定一个合适的数值。 总之,executor.memoryOverhead参数需要根据作业的需求和集群的配置进行适当的调整,以保证Spark作业能够正常运行,并且不出现内存不足或者过多使用内存的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值