RDD缓存驱逐的LRU策略如何在apache spark中工作?

时间:2017-09-06 08:45:56

标签: apache-spark spark-streaming rdd

(1)Spark如何决定为RDD驱逐哪些分区?

(2)LRU和RDD StorageLevel之间的关系是什么?

(3)如果数据源大小非常大(大于所有执行程序内存的总和),那么如何加载数据并创建RDD?它与LRU有关吗?

我创建了这个问题,目的是获取有关RDD LRU驱逐的一些细节,StorageLevel。

1 个答案:

答案 0 :(得分:2)

1.默认的RDD驱逐策略是LRU。当内存空间不足以进行RDD缓存时,几个分区将被驱逐,如果这些分区后来再次使用,它们将被Lineage信息再现并再次缓存在内存中。 不适合内存的缓存数据集要么溢出到磁盘,要么在需要时动态重新计算,这由RDD的存储级别确定

2.我还没有发现LRU和RDD storageLevel之间的关系。但是,如果不适合内存,你可以使用不同的storageLevel来缓存数据。不同的storageLevel,MEMORY_AND_DISK_SER也是如此。可以帮助减少GC并避免昂贵的重新计算。

3.我不这么认为,如果您对大于所有执行程序内存或集群大小之和的数据运行spark,则会出现任何问题。许多操作都可以通过流式传输数据,以及因此,内存使用与输入数据大小无关。在少数情况下,如果作业失败或者单个分区变得太大而不适合内存,则通常的方法是重新分区到更多分区,因此每个分区都更小。希望它适合。