Spark内存模型

1:MemoryManager
org.apache.spark.memory.MemoryManager
spark为存储内存和执行内存的管理提供了统一的接口–MemoryManager,同一个Executor内的任务都调用这个接口的方法来申请或释放内存。
—>进入后Ctr + H 查看实现类:
StaticMemoryManager:
执行内存和存储内存相互之间不能占用
UnifiedMemoryManager:
执行内存和存储内存相互之间能占用
内存管理接口:
申请存储内存
def acquireStorageMemory(blockId: BlockId, numBytes: Long, memoryMode: MemoryMode): Boolean
申请展开内存
def acquireUnrollMemory(blockId: BlockId, numBytes: Long, memoryMode: MemoryMode): Boolean
申请执行内存
def acquireExecutionMemory(numBytes: Long,taskAttemptId: Long, memoryMode: MemoryMode): Long
释放执行内存
def releaseExecutionMemory( numBytes: Long, taskAttemptId: Long,memoryMode: MemoryMode): Unit
释放存储内存
def releaseStorageMemory(numBytes: Long, memoryMode: MemoryMode): Unit
释放展开内存
def releaseUnrollMemory(numBytes: Long, memoryMode: MemoryMode): Unit

3个申请内存的,3个是释放内存的方法,就是对申请到的总内存进行一种逻辑上的管理规划。
堆外内存和堆内内存是真实存在的一个内存区域。执行内存和存储内存,都是堆内和堆外内存的一个逻辑区的概念。通过每个区域的上限来隔离。
2:内存空间分配
(1)静态内存管理
c
在这里插入图片描述
可用堆内内存空间
可用的存储内存 = systemMaxMemory * spark.storage.memoryFraction * spark.storage.safetyFraction
可用的执行内存 = systemMaxMemory * spark.shuffle.memoryFraction * spark.shuffle.safetyFraction

静态内存管理图示——堆外
在这里插入图片描述
(2)统一内存管理
统一内存管理图示——堆内
在这里插入图片描述
统一内存管理图示——堆外
在这里插入图片描述
spark.memoryoffHeap.enable(默认值false,没有堆外内存),启用改为true。
spark.memory.userLegacyMode(默认值为false,使用统一内存管理)改为true表示启用静态内存管理;若要使用静态内存管理还得配置的参数有:spark.shuffle.memoryFraction、spark.storage.memoryFraction、spark.storage.unrollFraction。

3:内存管理宏观概述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值