StaticMemoryManager(1.6以前)
- execution 內(nèi)存:用于 shuffles端盆,如joins、sorts 和 aggregations暖呕,避免頻繁的 IO 而需要內(nèi)存 buffer
- storage 內(nèi)存:用于 caching RDD,緩存 broadcast 數(shù)據(jù)及緩存 task results
- 其他內(nèi)存
參數(shù)
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之后)
參數(shù)
spark.memory.fraction=0.6
(之前是0.75)
spark.memory.storageFraction=0.5
RESERVED_SYSTEM_MEMORY_BYTES=300
- maxMemory 即 execution 和 storage 能共用的內(nèi)存總和為 getMaxMemory(conf),即
(JVM最大可用內(nèi)存 - 系統(tǒng)預(yù)留內(nèi)存) * spark.memory.fraction
- storageRegionSize 為
maxMemory * conf.getDouble("spark.memory.storageFraction", 0.5)
堪侯,在沒有設(shè)置spark.memory.storageFraction
的情況下為一半的 maxMemory