StaticMemoryManager(1.6以前)
- execution 内存:用于 shuffles,如joins、sorts 和 aggregations,避免频繁的 IO 而需要内存 buffer
- storage 内存:用于 caching RDD,缓存 broadcast 数据及缓存 task results
- 其他内存
参数
spark.shuffle.memoryFraction=0.2
spark.shuffle.safetyFraction=0.8
spark.storage.memoryFraction=0.6
spark.storage.safetyFraction=0.9
spark.storage.unrollFraction=0.2
execution: JVM * 0.2 * 0.8
storage: JVM * 0.6 * 0.9 (0.2用于序列化/反序列化)
other: JVM * 0.2
UnifiedMemoryManager(1.6之后)
参数
spark.memory.fraction=0.6
(之前是0.75)
spark.memory.storageFraction=0.5
RESERVED_SYSTEM_MEMORY_BYTES=300
- maxMemory 即 execution 和 storage 能共用的内存总和为 getMaxMemory(conf),即
(JVM最大可用内存 - 系统预留内存) * spark.memory.fraction
- storageRegionSize 为
maxMemory * conf.getDouble("spark.memory.storageFraction", 0.5)
,在没有设置spark.memory.storageFraction
的情况下为一半的 maxMemory
网友评论