Spark 内存管理之StaticMemoryManager

概要

Spark 内存管理概述 介绍了内存管理接口MemoryManager对内存的大致划分,这篇研究其子类StaticMemoryManager,静态内存管理器,的行为,主要是各部分内存的占比。StaticMemoryManager是Spark 1.6之前唯一的内存管理器。

StaticMemoryManager

Spark 内存管理概述 介绍了MemoryManager的UML,StaticMemoryManager继承自MemoryManager,如下
Spark 内存管理之StaticMemoryManager_第1张图片

StaticMemoryManager分别使用ExecutionMemoryPool、StorageMemoryPool管理execution、storage、unroll内存,UML如下
Spark 内存管理之StaticMemoryManager_第2张图片

内存管理

回顾MemoryManager

MemoryManager将内存划分为如下几部分,接下来研究静态内存管理中下面各部分占比
Spark 内存管理之StaticMemoryManager_第3张图片

静态内存管理

之所以称为静态内存管理,是因为storage、execution内存占比和界限是固定的。看下代码中对storage、execution、unroll内存大小的限制

  1. storage
    Spark 内存管理之StaticMemoryManager_第4张图片
  2. execution
    Spark 内存管理之StaticMemoryManager_第5张图片
  3. unroll

总结如下

storage 0.6 storage-safety 0.6 * 0.9 * (1.0-0.2)
unroll 0.6 * 0.9 * 0.2
storage-reserved 0.6 * 0.1
execution 0.2 execution-safety 0.2 * 0.8
execution-reserved 0.2 * 0.2
other 0.2

饼图表示如下
Spark 内存管理之StaticMemoryManager_第6张图片
因为无法准确计算实际使用中的内存,因此,storage、execution都会保留一部分内存,就是上图中的storage-reservedexecution-reserved

设置

spark 1.6版本之后默认使用统一资源管理器,由参数spark.memory.useLegacyMode控制,如下
Spark 内存管理之StaticMemoryManager_第7张图片

总结

介绍StaticMemoryManager的结构,及其管理的内存storage、execution、unroll等占比,这里所说的管理只是数值的维护。

参考:
饼图工具–lizibuluo

你可能感兴趣的:(spark-core源码,spark)