【问题标题】:spark cache only keeps a fraction of RDDspark缓存只保留RDD的一小部分
【发布时间】:2015-04-07 22:07:53
【问题描述】:

当我显式调用 rdd.cache 时,我可以从 spark 控制台存储选项卡中看到,实际上只缓存了一小部分 rdd。我的问题是剩下的部分在哪里? Spark 如何决定将哪个部分保留在缓存中?

同样的问题也适用于 sc.textFile() 读取的初始原始数据。我知道这些 rdd 会自动缓存,即使 spark 控制台存储表没有显示有关其缓存状态的任何信息。我们知道其中有多少是缓存的还是丢失的?

【问题讨论】:

    标签: caching apache-spark swap


    【解决方案1】:

    cache()persist(StorageLevel.MEMORY_ONLY) 相同,您的数据量可能超过了可用内存。 Spark 然后以“最近最少使用”的方式驱逐缓存。

    您可以通过设置配置选项来调整缓存的保留内存。详情请参阅Spark Documentation,并留意:spark.driver.memoryspark.executor.memoryspark.storage.memoryFraction

    不是专家,但我认为textFile() 不会自动缓存任何东西; Spark Quick Start 显式缓存一个文本文件 RDD:sc.textFile(logFile, 2).cache()

    【讨论】:

    • 感谢您的解释。我看到一些低百分比的缓存数。丢失的部分似乎不是由 spark executors 内存不足引起的。不能确定。另外,我曾经读过输入数据会自动缓存。我再也找不到这篇文章了。我会继续寻找。
    • 我假设默认缓存内存最大为 300m(512mb 默认堆大小 * 0.6 memoryFraction,减去一些其他开销)。如果您需要增加驱动程序或执行程序内存,这取决于您的设置。您是在本地运行 Spark 还是使用集群运行 Spark?如果在本地,你只需要调整spark.driver.memory
    • 如果您正在缓存,因为初始步骤的计算成本很高,并且不需要缓存作为内存中的对象,那么更好的调整是使用具有替代存储级别的 persit 方法。 spark.apache.org/docs/latest/… MEMORY_ONLY_SET ,允许您在内存中挤压更多(x4 与我的数据结构),DISK 选项允许您在磁盘上缓存
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2019-07-08
    • 1970-01-01
    • 2020-08-15
    • 2021-04-01
    相关资源
    最近更新 更多