我在火花中有一个基本问题。如果少数RDD被破坏,Spark会维护RDD的谱系以重新计算。所以JVM无法将其作为孤儿对象找到。然后如何以及何时发生RDD的垃圾收集?
答案 0 :(得分:8)
可以使用
配置RDD存储的内存"spark.storage.memoryFracion" property.
如果超出此限制,旧内存分区将从内存中删除。
我们可以将它设置为介于0和1之间的值,描述执行程序JVM内存的哪一部分专用于缓存RDD。默认值为0.66
假设我们有2 GB内存,那么我们将为你的堆获得0.4 * 2g内存,默认情况下为RDD存储获得0.66 * 2g。
我们可以配置Spark属性以打印有关GC的更多详细信息:
将spark.executor.extraJavaOptions
设为
“-verbose:gc -XX:-PrintGCDetails -XX:+PrintGCTimeStamps”
如果您的任务变慢并且您发现JVM经常进行垃圾收集或内存不足,则降低“spark.storage.memoryFracion
”值将有助于减少内存消耗。
有关详细信息,请参阅以下参考:
http://spark.apache.org/docs/1.2.1/tuning.html#garbage-collection-tuning