前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解惑|很多人对spark内存调优不太理解的配置

解惑|很多人对spark内存调优不太理解的配置

作者头像
Spark学习技巧
发布2019-07-09 10:09:52
2.2K0
发布2019-07-09 10:09:52
举报
文章被收录于专栏:Spark学习技巧Spark学习技巧

今天,星球里有个妹子问了一个问题,问题出自前面的一篇文章:

spark 内存,GC及数据结构调优

其中有段话:在gc的统计信息中,如果老年代接近满了, 减少用于缓存的内存(通过减小spark.memory.Fraction)。 缓存较少的对象比降低运行速度对我们来说更有好处。 另外,可以考虑减少年轻代。可以通过减小-Xmn参数设置的值,假如使用的话。 假如没有设置可以修改JVM的NewRation参数。 大多数JVMs默认值是2,意思是老年代占用了三分之二的总内存。 这个值要足够大,相当于扩展了spark.memory.fraction.

她的疑惑是为啥不直接设置:

代码语言:javascript
复制
spark.memory.storageFraction

以减少存储内存的占比。

大家可以思考一下,减少spark.memory.storageFraction,可行吗?

明显是不太可行的,这个是没有理解这两个参数的含义。

要知道spark的大部分内存分为执行内存和存储内存。他们共享一个存储空间M。同时,存储内存在执行内存空闲的时候可以占用执行内存空间,执行内存也可以在存储内存大于一个阈值R的时候占用存储内存。R代表缓存不可被清除的最小存储内存。

M和R的计算如下:

代码语言:javascript
复制
1),spark.memory.fraction将M的大小表示为(JVM堆空间 - 300MB)
的一部分(默认为0.75,新版本如spark2.2改为0.6)。
剩余的空间(25%,对应的新版本是0.4)用于用户数据结构,
Spark中的内部元数据,并且在稀疏和异常大的记录的情况下保护OOM错误。
2),spark.memory.storageFraction表示R的大小作为M的一部分(
默认为0.5)。R是M内的存储空间,其中缓存的块免于被执行器驱逐。

然后就会明白,假如我们单纯的减少spark.memory.storageFraction是行不通的,因为存储内存可以占用执行内存进行缓存,缓解不了老年代被吃满的状况,所以只能调整spark.memory.fraction。

1.当然,除了这样,还可以减少年轻代大小,前提是不影响性能。

2.spark最骚的操作是,没有加内存解决不了的问题,假如有那是没加够。

所以建议大家在学习的时候注意深入细心,然后连贯思考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档