我正在使用Spark 2.0,这项工作首先是对输入数据进行排序并将其输出存储在HDFS上。
我出现了内存错误,解决方法是将“spark.shuffle.memoryFraction”的值从0.2增加到0.8,这就解决了这个问题。但是在文档中我发现这是一个弃用的参数。
据我所知,它被“spark.memory.fraction”取代。如何在考虑HDFS的排序和存储的同时修改此参数?
答案 0 :(得分:4)
虽然有两个相关配置,但典型用户 不应该调整它们,因为默认值适用 大多数工作量:
spark.memory.fraction
将M的大小表示为(JVM堆空间 - 300MB)的一小部分(默认值为0.6)。余下的空间(25%)
保留用户数据结构,Spark中的内部元数据和 在稀疏和异常情况下保护OOM错误 大记录。spark.memory.storageFraction
将R的大小表示为M的一小部分(默认为0.5)。 R是M中缓存的存储空间 阻止被执行驱逐。应设置
spark.memory.fraction
的值以适应此情况 在JVM的旧版或“终身”内轻松堆积空间 代。否则,当大部分空间用于缓存时 执行时,终身代将会满,这会导致JVM 大大增加垃圾收集的时间。
在spark-1.6.2中,我会修改spark.storage.memoryFraction
。
作为旁注,你确定你了解你的工作表现如何吗?
通常首先从memoryOverhead
,#cores等开始微调你的工作,然后转到你修改的属性。