gpt4 book ai didi

apache-spark - Spark 如何驱逐缓存分区?

转载 作者:行者123 更新时间:2023-12-04 16:30:52 27 4
gpt4 key购买 nike

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

假设我有一个包含 100 个分区的 RDD,一次总共只有 10 个分区适合内存。

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

假设我遍历该 RDD 中的数据。

rdd.persist()  // MEMORY_ONLY

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

rdd.unpersist()

对于每次迭代,在 rdd.unpersist() 之前,持久化的前 10 个分区是否始终在内存中?

最佳答案

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

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

我想你的内存中总会有 10 个分区,但哪些分区存储在内存中,哪些分区会被逐出取决于它们的使用情况。根据Apache FAQ :

Likewise, cached datasets that do not fit in memory are either spilled to disk or recomputed on the fly when needed, as determined by the RDD's storage level.

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

关于apache-spark - Spark 如何驱逐缓存分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42660385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com