spark内存管理

一、内存划分

  1. 执行内存 (Execution Memory) : 主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据;

  2. 存储内存 (Storage Memory) : 主要用于存储 spark 的 cache 数据,例如RDD的缓存、unroll数据;

  3. 用户内存(User Memory): 主要用于存储 RDD 转换操作所需要的数据,例如 RDD 依赖等信息;

  4. 预留内存(Reserved Memory): 系统预留内存,会用来存储Spark内部对象。

二、内存计算

在spark中内存划分为四块,为什么划分为四块一级如何划分,个人总结为如下:

1、预留内存 (Reserved Memory)

系统预留内存,会用来存储Spark内部对象。其大小在代码中是写死的,其值等于 300MB,这个值是不能修改的(如果在测试环境下,我们可以通过 spark.testing.reservedMemory 参数进行修改);如果Executor分配的内存小于 1.5 * 300 = 450M 时,Executor将无法执行。

统一内存管理最初版本other这部分内存没有固定值 300M 设置,而是和静态内存管理相似,设置的百分比,最初版本占 25%。百分比设置在实际使用中出现了问题,若给定的内存较低时,例如 1G,会导致 OOM,因此,other这部分内存做了修改,先划出 300M 内存。

2、存储内存 (Storage Memory)

主要用于存储 spark 的 cache 数据,例如 RDD 的缓存、广播(Broadcast)数据、和 unroll 数据。内存占比为 UsableMemory * spark.memory.fraction * spark.memory.storageFraction,Spark 2+ 中,默认初始状态下 Storage Memory 和 Execution Memory 均约占系统总内存的30%(1 * 0.6 * 0.5 = 0.3)。在 UnifiedMemory 管理中,这两部分内存可以相互借用.

spark.memory.fraction 最初版本的值是 0.75,很多分析统一内存管理这块的文章也是这么介绍的,同样的,在使用中发现这个值设置的偏高,导致了 gc 时间过长,spark 2.0 版本将其调整为 0.6

3、执行内存 (Execution Memory)

主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据。内存占比为 UsableMemory * spark.memory.fraction * (1 - spark.memory.storageFraction),Spark 2+ 中,默认初始状态下 Storage Memory 和 Execution Memory 均约占系统总内存的30%(1 * 0.6 * (1 - 0.5) = 0.3)。

4、其他/用户内存 (Other/User Memory) : 主要用于存储 RDD 转换操作所需要的数据,例如 RDD 依赖等信息。内存占比为 UsableMemory * (1 - spark.memory.fraction),在Spark2+ 中,默认占可用内存的40%(1 * (1 - 0.6) = 0.4)。

其中,usableMemory = executorMemory - reservedMemory,这个就是 Spark 可用内存。

、内存设置

spark内部的内存默认如此划分,但是我们在代码或者提交任务的命令中可以对这些参数进行调整,使之最适合我们的环境和业务场景。这也就是spark的一个调优手段,在这里就说调优相关的内容了。这里要说的是spark中的动态资源分配:

动态分配,顾名思义就是可以灵活的使用集群中可用的资源而不完全受限于参数控制。其主要表现在spark的存储内存与执行内存之间,即他们之间可以相互借用。另外还会集群可用资源以及计算出来的应用所需资源大小来分配具体执行任务的资源,这样以来可以有效避免资源的浪费,提高处理效率。

在设置资源分配的时候需要特别注意一点,如果集群开启了动态分配,那么你最终在web ui看到的可能并非是拟设置的:

--conf "spark.dynamicAllocation.enabled"=false

在开启"spark.dynamicAllocation.enabled"时还需设置"spark.shuffle.service.enabled"为true

当设置这两个参数后会禁用动态分配,这时你所使用的资源就是拟设置的资源。如果为设置这个参数设置为true,那么就是系统动态分配的资源。

 

posted @ 2019-09-02 09:41  力扛九鼎  阅读(439)  评论(0编辑  收藏  举报