Spark的Executor是如何划分内存区域的?

提问者:帅平 问题分类:面试刷题
Spark的Executor是如何划分内存区域的?
2 个回答
一心居一人
一心居一人
对于堆内内存的划分方式和堆外差不多,Spark 也会划分出用于执行和缓存的两份内存空间。不仅如此,Spark 在堆内还会划分出一片叫做 User Memory 的内存空间,它用于存储开发者自定义数据结构。除此之外,Spark 在堆内还会预留出一小部分内存空间,叫做 Reserved Memory,它被用来存储各种 Spark 内部对象,例如存储系统中的 BlockManager、DiskBlockManager 等等。
默认情况下,Spark 仅仅使用了堆内内存。Executor 端的堆内内存区域大致可以分为以下四大块:
1、Execution 内存:主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据
2、Storage 内存:主要用于存储 spark 的 cache数据,例如RDD的缓存、unroll数据
3、用户内存(User Memory):主要用于存储RDD 转换操作所需要的数据,例如 RDD 依赖等信息,map等操作中的连接,时间转换对象
4、预留内存(Reserved Memory):系统预留内存,会用来存储Spark内部对象.其值等于 300MB,这个值是不能修改的(如果在测试环境下,我们可以通过 spark.testing.reservedMemory 参数进行修改)
发布于:3个月前 (01-22) IP属地:四川省
自沧桑
自沧桑
对于堆外内存,Spark 把堆外内存划分为两块区域:一块用于执行分布式任务,如 Shuffle、Sort 和 Aggregate 等操作,这部分内存叫做 Execution Memory;一块用于缓存 RDD 和广播变量等数据,它被称为 Storage Memory。
默认情况下,堆外内存是关闭的,可以通过spark.memory.offHeap.enabled 参数启用,并且通过 spark.memory.offHeap.size 设置堆外内 存大小,单位为字节。如果堆外内存被启用,那么 Executor 内将同时存在堆内和堆外内存,两者的使用互不影响,这个时候 Executor 中的Execution 内存是堆内的 Execution 内存和堆外的 Execution 内存之和,同理,Storage 内存也一样。
发布于:3个月前 (01-22) IP属地:四川省
我来回答