Spark 如何逐出缓存分区?

2023-12-01

我在独立模式下运行 Spark 2.0,并且我是集群中唯一提交作业的人。

假设我有一个包含 100 个分区的 RDD,并且一次总共只能容纳 10 个分区。

我们还假设分配的执行内存足够并且不会干扰存储内存。

假设我迭代该 RDD 中的数据。

rdd.persist()  // MEMORY_ONLY

for (_ <- 0 until 10) {
  rdd.map(...).reduce(...)
}

rdd.unpersist()

对于每次迭代,前 10 个持久化的分区将始终保留在内存中,直到rdd.unpersist()?


目前我所知道的 Spark 使用的是LRU(最近最少使用)驱逐策略RDD 分区默认。他们正在努力添加新策略。https://issues.apache.org/jira/browse/SPARK-14289

此策略删除最近较少使用的元素。当将元素放入缓存或从缓存中检索元素时,将更新上次使用的时间戳。

我想你的内存中总会有 10 个分区,但哪些分区存储在内存中,哪些分区将被驱逐取决于它们的使用情况。根据阿帕奇常见问题解答:

同样,不适合内存的缓存数据集要么会溢出 磁盘或在需要时重新计算,由 RDD的存储级别。

因此,其他分区是否溢出到磁盘或动态重新计算取决于您的配置。重新计算是默认选项,这并不总是最有效的选择。您可以将数据集的存储级别设置为 MEMORY_AND_DISK 以避免这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 如何逐出缓存分区? 的相关文章

随机推荐