Spark 内存管理之StaticMemoryManager

来源:互联网 发布:怎么入侵网站数据库 编辑:程序博客网 时间:2024/05/16 16:22

概要

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

StaticMemoryManager

Spark 内存管理概述 介绍了MemoryManager的UML,StaticMemoryManager继承自MemoryManager,如下

StaticMemoryManager分别使用ExecutionMemoryPool、StorageMemoryPool管理execution、storage、unroll内存,UML如下

内存管理

回顾MemoryManager

MemoryManager将内存划分为如下几部分,接下来研究静态内存管理中下面各部分占比
这里写图片描述

静态内存管理

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

  1. storage
  2. execution
  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

饼图表示如下

因为无法准确计算实际使用中的内存,因此,storage、execution都会保留一部分内存,就是上图中的storage-reservedexecution-reserved

设置

spark 1.6版本之后默认使用统一资源管理器,由参数spark.memory.useLegacyMode控制,如下

总结

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

参考:
饼图工具–lizibuluo

1 0
原创粉丝点击