首页 文章

Spark 2.0内存分数

提问于
浏览
5

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

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

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

1 回答

  • 4

    来自documentation

    虽然有两种相关配置,但典型用户不需要调整它们,因为默认值适用于大多数工作负载:spark.memory.fraction将M的大小表示为(JVM堆空间 - 300MB)的一小部分(默认值为0.6) . 其余的空间(25%)保留用于用户数据结构,Spark中的内部元数据,以及在稀疏和异常大的记录的情况下防止OOM错误 . spark.memory.storageFraction将R的大小表示为M的一小部分(默认值为0.5) . R是M中的存储空间,其中缓存块不受执行驱逐的影响 . 应该设置spark.memory.fraction的值,以便在JVM的旧版或“终身”代中舒适地适应这个堆空间量 . 否则,当大部分空间用于缓存和执行时,tenured generation将会满,这会导致JVM显着增加垃圾收集所花费的时间 .

    spark-1.6.2我会修改 spark.storage.memoryFraction .


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

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

相关问题