根据Spark文档
spark.storage.memoryFraction
:用于Spark的内存缓存的Java堆的分数.这不应该大于JVM中的"旧"对象生成,默认情况下会给出0.6的堆,但如果配置自己的旧生成大小,则可以增加它.
我找到了几个博客和文章,建议在纱线模式下将其设置为零.为什么这比设置接近1更好?一般来说,它的合理价值是什么?
Spark执行器设置为3个区域.
存储 - 保留用于缓存的内存
执行 - 为对象创建保留的内存
执行者开销.
在Spark 1.5.2及更早版本中:
spark.storage.memoryFraction设置1和2的内存比率.默认值为.6,因此60%的已分配执行程序内存保留用于缓存.根据我的经验,我只发现这个数字减少了.通常,当开发人员遇到GC问题时,应用程序在对象中有更大的"流失",并且优化的第一个位置之一是更改memoryFraction.
如果您的应用程序没有缓存任何数据,那么您应该将其设置为0.不知道为什么那个特定于YARN,你能发表文章吗?
在Spark 1.6.0及更高版本中:
内存管理现已统一.存储和执行都共享堆.所以这不再适用了.