Apache Spark中的spark.storage.memoryFraction设置

Bob*_*Bob 5 python java hadoop-yarn apache-spark

根据Spark文档

spark.storage.memoryFraction:用于Spark的内存缓存的Java堆的分数.这不应该大于JVM中的"旧"对象生成,默认情况下会给出0.6的堆,但如果配置自己的旧生成大小,则可以增加它.

我找到了几个博客和文章,建议在纱线模式下将其设置为零.为什么这比设置接近1更好?一般来说,它的合理价值是什么?

Joe*_*den 10

Spark执行器设置为3个区域.

  1. 存储 - 保留用于缓存的内存
  2. 执行 - 为对象创建保留的内存
  3. 执行者开销.

在Spark 1.5.2及更早版本中:

spark.storage.memoryFraction设置1和2的内存比率.默认值为.6,因此60%的已分配执行程序内存保留用于缓存.根据我的经验,我只发现这个数字减少了.通常,当开发人员遇到GC问题时,应用程序在对象中有更大的"流失",并且优化的第一个位置之一是更改memoryFraction.

如果您的应用程序没有缓存任何数据,那么您应该将其设置为0.不知道为什么那个特定于YARN,你能发表文章吗?

在Spark 1.6.0及更高版本中:

内存管理现已统一.存储和执行都共享堆.所以这不再适用了.

  • 这将比我更好地解释它:http://0x0fff.com/spark-architecture/ (2认同)
  • Alexey Grishchenko 的解释有更新版本:https://0x0fff.com/spark-memory-management/ (2认同)