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 参数,其意义在于在逻辑上预留出一块保险区域,降低因实际内存超出当前预设范围而导致

这篇博客详细介绍了Spark的内存模型,包括静态内存管理和统一内存管理。在静态管理中,Execution和Storage内存大小固定,而在统一管理中两者共享空间并能动态调整。堆内内存分为Execution、Storage和其他内存,堆外内存则可以避免频繁GC。通过配置参数,可以启用堆外内存并调整内存比例。

351

被折叠的 条评论
为什么被折叠?



