2345技术员联盟

如何管理Spark内存

  • 来源:未知 原创
  • 时间:2018-05-01
  • 阅读:
  • 本文标签:

        关于spark的内存管理。spark 1.6之前 使用StaticMemoryManager,叫legacy模式,默认是关闭的。spark1.6开始,使用UnifiedMemoryManager。1.6开始的内存结构:如何管理Spark内存spark内存结构由上图知道,内存由三部分组成。1.Reserved Memory ,系统保留的内存,是硬编码写死的,spark 1.6 这个值是300MB.这300MB不算在spark使用的内存里。2.user Memory 是spark Memory分配之后保留的。根据你自己的需要使用这块内存区域。 在spark 1.6中这块内存的大小(“Java Heap” – “Reserved Memory”) * (1.0 – spark.memory.fraction) ,默认大小: (“JavaHeap” – 300MB) * 0.25spark完全不关心你在这个区域做了什么和也不管是否达到了内存限制。如果超过内存限制会报OOM.3.Spark Memory这个区域是 spark管理的内存。 计算公式: (“Java Heap” – “Reserved Memory”) * spark.memory.fraction, spark 1.6 默认大小: (“Java Heap” – 300MB) * 0.75。






         这个区域分成两块。Storage Memory和Execution Memory 这两块内存的边界spark.memory.storageFraction指定,默认0.5.这个边界不是静态的,会移动。3.1.Storage Memorycache数据, broadcast 变量的数据,unroll序列化数据的临时空间。内存计算:“Spark Memory” * spark.memory.storageFraction = (“Java Heap” – “Reserved Memory”) * spark.memory.fraction * spark.memory.storageFraction.默认:(“Java Heap” – 300MB) * 0.75 * 0.5 = (“Java Heap” – 300MB) * 0.3753.2.Execution Memory: 存储任务运行期间需要的对象。边界移动:Storage Memory 内数据可以被强制清除,但是Execution Memory内数据不能被强制清除。








        二.executor.memoryOverhead这块内存是分配给每个executor的堆外内存。分配大小 :executorMemory * 0.10, with minimum of 384英文描述:The amount of off-heap memory (in megabytes) to be allocated per executor. This is memory that accounts for things like VM overheads, interned strings, other native overheads, etc. This tends to grow with the executor size (typically 6-10%).MemoryOverhead是JVM进程中除Java堆以外占用的空间大小,包括方法区(永久代)、Java虚拟机栈、本地方法栈、JVM进程本身所用的内存、直接内存(Direct Memory)等。通过spark.yarn.executor.memoryOverhead设置,单位MB。


本文来自电脑技术网www.it892.com),转载本文请注明来源.
本文链接:http://www.it892.com/content/hardware/ram/2018/0501/91418.html

无觅相关文章插件,快速提升流量