spark内存管理模型

Spark基本流程

1.用户在Driver上创建任务,初始化运行环境
2.Driver根据配置信息,向Resource Manager申请资源
3.Resource Manager资源管理器选择合适的Worker节点创捷Executor
4.Executor向Driver反向注册,并等待任务分配task
5.Driver端完成sparkContext的初始化,创建DAG,将task分配到Executor
6.Executor对task任务进行计算,并将结果返回给Driver

更具上述流程可知,spark主要在JVM上运行的进程有两个分别是driver进程和executor进程,其中主要的数据计算任务是在executor进程上完成的。driver进程主要的内存调整参数时 -- driver-momery默认为1G,其需要注意的collect算子,collect会将数据都拉到driver内存中,造成数据的OOM。executor进程在1.6.x版本之前的内存模型为静态内存模型,2.0.x主要使用的内存模型就是动态内存管理模型,其大小的调整参数为--executor-memory

spark内存管理

spark内存分为堆内内存和堆外内存,堆内内存基于JVM实现,堆外内存通过调用底层的JDK Unsafe API实现,堆外内存默认不开启(其开启参数为spark.memory.offHeap.enabled, 大小参数spark.memory.offHeap.size=1024).

静态内存管理

主要由四个部分组成,分别为:

  • Reserved内存:预留内存,预防OOM,默认分别占Storage内存区域的10%(参数为spark.storage.safetyFraction)及Execution内存区域的20%(参数为spark.suffle.safetyFraction)。
  • Storage内存:用于存储RDD数据以及内存广播数据,当需要用于unroll(缓存Iterator的Block数据)时的内存也是取自于这一部分(大概会占据Storage内存的20%,由spark.storage.unrollFraction参数控制)。默认占spark内存的60%,调整参数为spark.storage.memory。
  • Execution内存:主要用于缓存shuffle过程中的中间数据,默认占spark内存参数的20%,调整参数为spark.shuffle.memory。
  • Other内存:用于存储用户定义的数据结构及spark元数据,其主要占比取决于Storage内存及Execution内存的大小,默认占比20%。

缺点:虽然可以通过手动的方式调整各个内存的占比,但是调整后的shuffle和缓存比例依旧固定,会导致资源不能得到充分的利用。对应的task的内存分配模式为每个task所用的内存平均分配缺少灵活度。

统一内存管理模型

也是主要由四个部分组成,Storage内存与Execution内存统一进行管理(调整参数为spark.memory.fraction)占整个内存减去系统预留内存的60%,分别为:

  • 系统Reserved内存:预留内存,预防OOM,默认大小为300M(参数为spark.suffle.safetyFraction)。
  • Storage内存:用于存储RDD数据以及内存广播数据,当unroll的数据存储不下时会将数据存储到Driver中。默认占统一内存的50%,调整参数为spark.memory.storageFraction。
  • Execution内存:主要用于缓存shuffle过程中的中间数据,默认占统一内存参数的50%,调整参数为spark.memory.storageFraction。
  • Other内存:用于存储用户定义的数据结构及spark元数据,其主要占比取决于Storage内存及Execution内存的大小,默认占比40%。

统一内存管理的规则时

  1. 当内存都不足时,会将数据存储到磁盘中;当二者中有一方内存不足而另一方存储有剩余时,不足的一方会占用剩余一方剩余的内存
  2. 当Storage内存不足时,占据Execution内存时,Execution内存回收时,会让Storage先将占用内存的数据溢写到磁盘中(溢写的规则是LRU),再释放内存
  3. 当Execution内存不足时,借用的Storage内存不返还

对task分配的内存大小取决于正在运行的task数量的多少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

难得将就

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值