Spark 2.0内存分数

syl*_*syl 5 memory distributed-computing out-of-memory apache-spark apache-spark-2.0

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

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

据我所知,它被"spark.memory.fraction"取代.如何在考虑HDFS的排序和存储的同时修改此参数?

gsa*_*ras 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 的旧代或“终身”代中舒适地适应此数量的堆空间。否则,当这些空间的大部分用于缓存和执行时,老年代将满,这会导致 JVM 显着增加垃圾收集所花费的时间。

我会修改spark.storage.memoryFraction.


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

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