TOP

spark堆外内存的设置
2019-01-06 01:28:34 】 浏览:474
Tags:spark 内存 设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxx4903049/article/details/79197428

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

相关源码:

  1. //yarn/common/src/main/scala/org/apache/spark/deploy/yarn/YarnSparkHadoopUtil.scala
  2. valMEMORY_OVERHEAD_FACTOR=0.07
  3. valMEMORY_OVERHEAD_MIN=384
  4. //yarn/common/src/main/scala/org/apache/spark/deploy/yarn/YarnAllocator.scala
  5. protectedvalmemoryOverhead:Int=sparkConf.getInt("spark.yarn.executor.memoryOverhead",
  6. math.max((MEMORY_OVERHEAD_FACTOR*executorMemory).toInt,MEMORY_OVERHEAD_MIN))
  7. ......
  8. valtotalExecutorMemory=executorMemory+memoryOverhead
  9. numPendingAllocate.addAndGet(missing)
  10. logInfo(s"Willallocate$missingexecutorcontainers,eachwith$totalExecutorMemoryMB"+
  11. s"memoryincluding$memoryOverheadMBoverhead")


三、相关问题

如果用于存储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手动设置一个更大的值。


spark堆外内存的设置 https://www.cppentry.com/bencandy.php?fid=116&id=202648

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spark 本地模式运行 磁盘空间不足 下一篇Spark变量访问总结