Spark 内存模块

运行在 JVM 体系上,内存模型基于 Java 虚拟机

堆、栈、静态代码块和全局空间

Executor

  • 申请内存包括下面两部分 M1+M2
    • OnHeap 堆内内存 spark.executor.memory
    • OffHeap 堆外内存 spark.yarn.executor.memoryOverhead
      • spark.memory.offHeap.size
  • Task Memory Manager
    • E 的线程共享 JVM 资源,没有强隔离

内存划分

  • Storage:RDD缓存、Broadcast 数据空间
  • Execution:Shuffle 过程使用的内存
    • 第一块是让task执行我们自己编写的代码时使用,默认是占Executor总内存的20%;
      • JVM
    • 第二块是让task通过shuffle过程拉取了上一个stage的task的输出后,进行聚合等操作时使用,默认也是占Executor总内存的20%;
      • 通过 spark.shuffle.memoryFraction 控制大小
    • 第三块是让RDD持久化时使用,默认占Executor总内存的60%。
      • persisit() 或 cache()
      • 通过 spark.storage.memoryFraction 控制大小
      • 超过限制,旧分区会被移除内存
  • Other:用户定义的数据结构、Spark 内部元数据

网络回响

作者

Ryen Xiang

发布于

2026-02-17

更新于

2026-02-17

许可协议


评论