Spark内存管理

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

你可能感兴趣的:(Spark内存管理)