spark
Executor内存总体布局
默认情况下,Executor不开启堆外内存,因此整个 Executor 端内存布局如下图所示:
整个Executor内存区域分为两块:
1、JVM堆外内存
大小由 spark.yarn.executor.memoryOverhead
参数指定。默认大小为 executorMemory * 0.10
, with minimum of 384m。
此部分内存主要用于JVM自身,字符串, NIO Buffer(Driect Buffer)等开销。此部分为用户代码及Spark 不可操作的内存,不足时可通过调整参数解决。
The amount of off-heap memory (in megabytes) to be allocated per executor. This is memory that accounts for things like VM overheads, interned strings, other native overheads, etc. This tends to grow with the executor size (typically 6-10%).
2、堆内内存(ExecutorMemory)
大小由 Spark 应用程序启动时的 –executor-memory
或 spark.executor.memory
参数配置,即JVM最大分配的堆内存 (-Xmx
)。Spark为了更高效的使用这部分内存,对这部分内存进行了逻辑上的划分管理。我们在下面的统一内存管理会详细介绍。
Spark 1.6之后引入了统一内存管理,包括了堆内内存 (On-heap Memory) 和堆