内容简介:Executor 端的内存模型,包括堆内内存(On-heap Memory)和堆外内存(Off-heap Memory)。Spark 为Execution 内存和Storage 内存的管理提供了统一的接:MemoryManager。
Executor 端的内存模型,包括堆内内存(On-heap Memory)和堆外内存(Off-heap Memory)。
存管理接口(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管理。
图静态内存管理-堆内内存的分配
堆外空间管理
堆外只有Execution 内存和Storage 内存,他们的大小由spark.memory.storageFraction这个参数决定。由于堆外内存占用的空间可以被精确计算,所以无需再设定保险区域
静态内存管理-堆外内存的分配
2统一内存管理
Spark 1.6 之后引入的统一内存管理机制,与静态内存管理的区别在于Storage 内存和Execution 内存共享同一块空间,可以动态占用对方的空闲区域。
堆内内存(On-heap Memory)
堆内内存区域大致可以分为以下四类:
1)Execution 内存:主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据
2)Storage 内存:主要用于缓存和传播内部数据
3)Other:用户数据结构、Spark内部元数据。
4)预留内存(Reserved Memory):系统预留内存。默认是300MB。
堆内存(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 内存也一样。
说明
maxOffHeapMemory=spark.memory.offHeap.size
Execution 内存和 Storage 内存动态调整
1)设定基本的Storage 内存和Execution 内存区域(通过spark.storage.storageFraction配置比例,默认是0.5,即各占一半)
2)Storage 内存和Execution 内存都不足时,则存储到硬盘;若己方空间不足而对方空余时,可借用对方的空间;(存储空间不足是指不足以放下一个完整的 Block)
3)Execution 内存空间被对方占用后,可让对方将占用的部分转存到硬盘,然后"归还"借用的空间
4)Storage 内存空间被对方占用后,无法让对方"归还",因为实现起来较为复杂。
动态整
以上所述就是小编给大家介绍的《大数据计算框架Spark之内存模型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 自定义MVC框架-封装模型层
- 智能搜索模型预估框架的建设与实践
- Netty 和 RPC 框架线程模型分析
- golang常见的几种并发模型框架
- 智能搜索模型预估框架Augur的建设与实践
- Flask框架从入门到精通之模型查询(十三)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hit Refresh
Satya Nadella、Greg Shaw / HarperBusiness / 2017-9-26 / USD 20.37
Hit Refresh is about individual change, about the transformation happening inside of Microsoft and the technology that will soon impact all of our lives—the arrival of the most exciting and disruptive......一起来看看 《Hit Refresh》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
RGB HSV 转换
RGB HSV 互转工具