一. Jvm内存:
二. Yarn container内存组成
三. Spark堆内存组成
四. Spark 非堆内存
分为overhead内存和off-head内存
-
Spark 的overhead属于堆外内存:
overhead内存= max(executorMemory * spark.executor.memoryOverheadFactor, 384m)
overhead内存存储VM overheads, interned strings, other native overheads, etc。
spark.executor.memoryOverhead 控制。默认值为执行器内存的 10%,最小值为 384MB。这意味着,即使用户没有明确设置该参数,Spark 也会预留执行器内存的 10%(或 384MB,以较高者为准)。
-
Spark off-head内存
和堆内内存使用相同,堆外内存由 spark.memory.offHeap.size 决定。这是一项可选功能,可以通过将 spark.memory.offHeap.use 设置为 true 来启用。
Spark的off-head存分配,如下:
五. 堆内空间和off-heap对比
由图可见off-head memory由多个executor jvm共享。
参考:
https://blog.youkuaiyun.com/Lzx116/article/details/125929100
https://community.cloudera.com/t5/Community-Articles/Spark-Memory-Management/ta-p/317794