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