spark 内存管理总结

元气小坏坏 提交于 2020-08-13 08:14:37

spark 内存管理总结

spark内存分为 on-heap和off-heap,堆内内存和堆外内存

  • 堆外内存,会把数据序列化之后写入jvm内存之外,但是需要单独编码申请资源和释放资源一般不怎么样用
  • 堆内内存,在jvm内存里,受jvmGC影响,如果创建很多小对象或者小的存储结果会频繁的触发新生代的GC,可以在提交任务的时候添加参数打印GC日志观察

堆内内存详解

spark 1.6之后放弃了原有的静态内存管理器(可以配置参数来分配spark内存),转而使用统一内存管理,将内存分为4大块

  • 存储内存:用户缓存RDD,如cache和persist操作(75%*50%)
  • execute内存/计算内存:用户shuffle运算等(75%*50%)
  • 用户内存:用户存放用户代码,相关依赖等等(25%)
  • 预留内存:用于系统存储spark内部对象之类的(默认300MB)

其中 存储内存和计算内存占spark整个内存的75%,然后二者各占75%*50%,他们两个可以互相侵占如果存储内存不足会侵占计算内存,计算内存不足也可以侵占存储内存,如果都不足就会溢出到磁盘,但是运算内存如果侵占了存储内存是不会归还因为shuffle计算的中间结果还在.

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!