spark executor内存分配_二十二、Spark之图解Executor端内存管理

Spark应用程序执行时,Spark集群会启动Driver和Executor两种JVM进程,Driver端负责创建SparkContext上下文(通往集群的唯一通道),构建DAG, 创建Task并进行分发。而Executor负责Task的计算任务,并将最终的结果返回给Driver,同时需要为持久化的RDD提供存储。

Spark的Executor端的内存管理主要经历了两大阶段,在Spark1.6版本前使用的是静态内存管理,而在Spark1.6之后引入了统一内存管理。

Spark静态内存管理

Spark的静态内存管理:内存存储、执行内存和其他内存的大小在Spark应用程序执行期间均已按固定配额分配好,用户只能在提交任务的时候进行相关配置调整, 一旦任务提交资源申请好以后无法动态改变。

有关Spark静态内存的配额,请参考后面图表。

Spark统一内存管理

Spark1.6版本之后引入了统一内存管理,它与静态内存管理的区别在于存储内存和执行内存共享一块空间,可以相互借用。

在Spark1.6版本以后,统一内存管理的配额根据具体版本也有微小的不同,现以Spark 2.4.5进行配额讲解内存划分:

  1. 300M预留内存
  2. Task的运行内存:(总内存-300M预留内存)*0.4
  3. spark.memory.fraction: (总内存-300M预留内存)*0.6
    1. spark.memory.storageFraction:占用0.5, 即(总内存-300M预留内存)*0.6*0.5, 主要用来作为RDD的缓存和广播变量的存储
    2. 剩余的50%为shuffle的聚合内存
    3. a和b之间的内存可以相互动态借用,这样避免了资源的浪费,也避免了手工的设置。
    4. 在shuffle的文件寻址中的reduce task启动5个task拉取的数据,就是放到b这个shuffle聚合内存中。

Spark静态内存与统一内存图解

Spark内存管理.png

1c7c2f8ddcf8b726a33008f8222a5bdf.png

Executor静态内存 vs 统一内存管理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值