spark堆外内存的设置

MemoryOverheadJVM进程中除Java以外占用的空间大小,包括方法区(永久代)、Java虚拟机栈、本地方法栈、JVM进程本身所用的内存、直接内存(Direct Memory等。通过spark.yarn.executor.memoryOverhead设置,单位MB

相关源码:

[java]  view plain  copy
  1. //yarn/common/src/main/scala/org/apache/spark/deploy/yarn/YarnSparkHadoopUtil.scala  
  2.   val MEMORY_OVERHEAD_FACTOR = 0.07  
  3.   val MEMORY_OVERHEAD_MIN = 384  
  4.   
  5. //yarn/common/src/main/scala/org/apache/spark/deploy/yarn/YarnAllocator.scala  
  6.   protected val memoryOverhead: Int = sparkConf.getInt("spark.yarn.executor.memoryOverhead",  
  7.     math.max((MEMORY_OVERHEAD_FACTOR * executorMemory).toInt, MEMORY_OVERHEAD_MIN))  
  8. ......  
  9.       val totalExecutorMemory = executorMemory + memoryOverhead  
  10.       numPendingAllocate.addAndGet(missing)  
  11.       logInfo(s"Will allocate $missing executor containers, each with $totalExecutorMemory MB " +  
  12.         s"memory including $memoryOverhead MB overhead")  


 

三、相关问题

如果用于存储RDD的空间不足,先存储的RDD的分区会被后存储的覆盖。当需要使用丢失分区的数据时,丢失的数据会被重新计算

如果Java或者永久代的内存不足,则会产生各种OOM异常,executor会被结束。spark会重新申请一个container运行executor。失败executor上的任务和存储的数据会在其他executor上重新计算。

如果实际运行过程中ExecutorMemory+MemoryOverhead之和(JVM进程总内存)超过container的容量。YARN会直接杀死containerexecutor日志中不会有异常记录。spark同样会重新申请container运行executor


Java以外的JVM进程内存占用较多的情况下,应该将MemoryOverhead设置为一个足够大的值,应该将MemoryOverhead设置为一个足够大的值,以防JVM进程因实际占用的内存超标而被kill。如果默认值math.max((MEMORY_OVERHEAD_FACTOR *executorMemory).toInt,MEMORY_OVERHEAD_MIN不够大,可以通过spark.yarn.executor.memoryOverhead手动设置一个更大的值。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值