大数据计算框架Spark之内存模型

栏目: 编程工具 · 发布时间: 5年前

内容简介:Executor 端的内存模型,包括堆内内存(On-heap Memory)和堆外内存(Off-heap Memory)。Spark 为Execution 内存和Storage 内存的管理提供了统一的接:MemoryManager。

大数据计算框架Spark之内存模型

Executor 端的内存模型,包括堆内内存(On-heap Memory)和堆外内存(Off-heap Memory)。

大数据计算框架Spark之内存模型

存管理接口(MemoryManager )

Spark 为Execution 内存和Storage 内存的管理提供了统一的接:MemoryManager。

MemoryManager 的具体实现上,Spark 1.6 之后默认为统一管理(Unified Memory Manager)方式,1.6 之前采用的静态管理(Static Memory Manager)方式仍被保留,可通过配置 spark.memory.useLegacyMode 参数启用。

1静态内存管理(Static Memory Manager)

堆内空间管理

存储内存、执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的,但可以在应用程序启动前进行配置。

可用的Execution 内存和 可用的Storage 内存计算公式:

可用的Execution 内存 = systemMaxMemory * spark.shuffle.memoryFraction * spark.shuffle.safetyFraction

可用的Storage 内存 = systemMaxMemory * spark.storage.memoryFraction * spark.storage.safetyFraction

systemMaxMemory 取决于当前 JVM 堆内内存的大小,公式中的两个 safetyFraction 参数,其意义在于在逻辑上预留出一块保险区域,降低因实际内存超出当前预设范围而导致 OOM 的风险。这块逻辑上预留的区域同样由JVM管理。

大数据计算框架Spark之内存模型

图静态内存管理-堆内内存的分配

堆外空间管理

堆外只有Execution 内存和Storage 内存,他们的大小由spark.memory.storageFraction这个参数决定。由于堆外内存占用的空间可以被精确计算,所以无需再设定保险区域

大数据计算框架Spark之内存模型

静态内存管理-堆外内存的分配

2统一内存管理

Spark 1.6 之后引入的统一内存管理机制,与静态内存管理的区别在于Storage 内存和Execution 内存共享同一块空间,可以动态占用对方的空闲区域。

堆内内存(On-heap Memory)

堆内内存区域大致可以分为以下四类:

1)Execution 内存:主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据

2)Storage 内存:主要用于缓存和传播内部数据

3)Other:用户数据结构、Spark内部元数据。

4)预留内存(Reserved Memory):系统预留内存。默认是300MB。

大数据计算框架Spark之内存模型

堆内存(Off-heap Memory)

Spark 1.6 开始引入了Off-heap memory(详见SPARK-11389)。这种模式不在 JVM 内申请内存,而是调用 Java unsafe API (如 C 语言里面的 malloc())直接向操作系统申请内存,JVM不管理这部分内存,所以可以避免频繁的 GC,但要自己编写内存申请和释放的逻辑。

堆外内存分为两类:Execution 内存和 Storage 内存。

默认情况下堆外内存不启用,可以通过配置spark.memory.offHeap.enabled 参数启用,通过配置spark.memory.offHeap.size 参数设定堆外内存空间的大小。

如果堆外内存被启用,那么 Executor 内将同时存在堆内和堆外内存,Executor 中的 Execution 内存是堆内的 Execution 内存和堆外的 Execution 内存之和,同理,Storage 内存也一样。

大数据计算框架Spark之内存模型

说明

maxOffHeapMemory=spark.memory.offHeap.size

Execution 内存和 Storage 内存动态调整

1)设定基本的Storage 内存和Execution 内存区域(通过spark.storage.storageFraction配置比例,默认是0.5,即各占一半)

2)Storage 内存和Execution 内存都不足时,则存储到硬盘;若己方空间不足而对方空余时,可借用对方的空间;(存储空间不足是指不足以放下一个完整的 Block)

3)Execution 内存空间被对方占用后,可让对方将占用的部分转存到硬盘,然后"归还"借用的空间

4)Storage 内存空间被对方占用后,无法让对方"归还",因为实现起来较为复杂。

大数据计算框架Spark之内存模型

动态整


以上所述就是小编给大家介绍的《大数据计算框架Spark之内存模型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大学的终结

大学的终结

[美] 凯文·凯里(Kevin Carey) / 朱志勇、韩倩 / 人民邮电出版社 / 2017-2-28 / 59.00

你了解目前全球高等教育的现状吗?你知道高等教育的未来是什么样的吗?你听说过泛在大学吗?翻开本书,了解大学的过去、现在与未来。 《大学的终结:泛在大学与高等教育革命》一书由美国著名教育作家凯文? 凯里倾情打造。作者在书中详细论述了美国大学的历史变迁、大学的本质、大学的未来、信息技术与教育的关系、泛在大学的定义、传统大学在大趋势下的挣扎,以及未来高等教育的学历认证与呈现形式。本书作者用缜密的逻辑......一起来看看 《大学的终结》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具