7

我正在使用 Spark 2.0,这项工作首先对输入数据进行排序并将其输出存储在 HDFS 上。

我遇到了内存错误,解决方案是将“spark.shuffle.memoryFraction”的值从 0.2 增加到 0.8,这解决了问题。但是在文档中我发现这是一个不推荐使用的参数。

据我了解,它已被“spark.memory.fraction”取代。如何在考虑到 HDFS 上的排序和存储的同时修改此参数?

4

1 回答 1

6

文档中:

虽然有两种相关配置,但一般用户不需要调整它们,因为默认值适用于大多数工作负载:

  • spark.memory.fraction将 M 的大小表示为(JVM 堆空间 - 300MB)(默认为 0.6)的一部分。其余空间 (40%)保留用于用户数据结构、Spark 中的内部元数据,以及在 记录稀疏和异常大
    的情况下防止 OOM 错误。
  • spark.memory.storageFraction将 R 的大小表示为 M 的分数(默认为 0.5)。R 是 M 中的存储空间,其中缓存块不会被执行驱逐。

spark.memory.fraction应该设置的值,以便在 JVM 的旧代或“终身”代中舒适地适应该堆空间量。否则,当大部分空间用于缓存和执行时,tenured generation 将被填满,这会导致 JVM 显着增加垃圾回收所花费的时间。

我会修改spark.storage.memoryFraction.


作为旁注,您确定您了解您的工作行为吗?

通常首先从 、 #cores 等开始微调您的工作memoryOverhead,然后再转到您修改的属性。

于 2016-09-23T16:07:46.197 回答