2 个回答
对于堆内内存的划分方式和堆外差不多,Spark 也会划分出用于执行和缓存的两份内存空间。不仅如此,Spark 在堆内还会划分出一片叫做 User Memory 的内存空间,它用于存储开发者自定义数据结构。除此之外,Spark 在堆内还会预留出一小部分内存空间,叫做 Reserved Memory,它被用来存储各种 Spark 内部对象,例如存储系统中的 BlockManager、DiskBlockManager 等等。
默认情况下,Spark 仅仅使用了堆内内存。Executor 端的堆内内存区域大致可以分为以下四大块:
默认情况下,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 内存也一样。
默认情况下,堆外内存是关闭的,可以通过spark.memory.offHeap.enabled 参数启用,并且通过 spark.memory.offHeap.size 设置堆外内 存大小,单位为字节。如果堆外内存被启用,那么 Executor 内将同时存在堆内和堆外内存,两者的使用互不影响,这个时候 Executor 中的Execution 内存是堆内的 Execution 内存和堆外的 Execution 内存之和,同理,Storage 内存也一样。
发布于:3个月前 (01-22) IP属地:四川省
我来回答
您需要 登录 后回答此问题!