我正在使用Spark 2.0,工作开始时对输入数据进行排序并将其输出存储在HDFS上。
我曾遇到内存不足的问题,解决方法是将"spark.shuffle.memoryFraction"的值从0.2增加到0.8,这解决了问题。但在文档中,我发现这是一个弃用的参数。
据我理解,它已被"spark.memory.fraction"取代。如何修改此参数,同时考虑到在HDFS上的排序和存储?
我正在使用Spark 2.0,工作开始时对输入数据进行排序并将其输出存储在HDFS上。
我曾遇到内存不足的问题,解决方法是将"spark.shuffle.memoryFraction"的值从0.2增加到0.8,这解决了问题。但在文档中,我发现这是一个弃用的参数。
据我理解,它已被"spark.memory.fraction"取代。如何修改此参数,同时考虑到在HDFS上的排序和存储?
来自文档:
在spark-1.6.2中,我将修改尽管有两个相关的配置,但典型用户不需要调整它们,因为默认值适用于大多数工作负载:
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”代中。否则,当大部分空间用于缓存和执行时,tenured 代将变满,这会导致 JVM 显著增加垃圾回收时间。
spark.storage.memoryFraction
。