Spark 原理篇:内存管理基础

内存的管理模式

堆内内存

申请与释放统一由 JVM 代劳
在这样的管理模式下,Spark 对内存的释放是有延迟的,因此,当 Spark 尝试估算当前可用内存时,很有可能会高估堆内的可用内存空间

堆外内存

Spark 通过调用 Unsafe 的 allocateMemory 和 freeMemory 方法直接在操作系统内存中申请、释放内存空间
这样的内存管理方式自然不再需要垃圾回收机制,也就免去了它带来的频繁扫描和回收引入的性能开销。更重要的是,空间的申请与释放可以精确计算,因此 Spark 对堆外可用内存的估算会更精确,对内存的利用率也更有把握。

内存区域的划分

堆外内存

执行内存:Execution Memory
存储内存:Storage Memory

堆内内存

Execution memory:执行内存
Storage memory:存储内存
User memory:开发者自定义数据结构
Reserved Memory:预留内存,spark内部对象,Spark内部对象业务应用不会染指

image.png

Spark内存区域划分

Execution Memory 和 Storage Memory 之间的抢占规则

1.如果对方的内存空间有空闲,双方就都可以抢占;
2.对于 RDD 缓存任务抢占的执行内存,当执行任务有内存需要时,RDD 缓存任务必须立即归还抢占的内存,涉及的 RDD 缓存数据要么落盘、要么清除;
3.对于分布式计算任务抢占的 Storage Memory 内存空间,即便 RDD 缓存任务有收回内存的需要,也要等到任务执行完毕才能释放。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容