【问题标题】:When will Spark clean the cached RDDs automatically?Spark 什么时候会自动清理缓存的 RDD?
【发布时间】:2017-12-30 11:43:58
【问题描述】:

已使用 scala 终端中的 rdd.cache() 方法缓存的 RDD 正在存储在内存中。

这意味着它将消耗一部分可供 Spark 进程本身使用的内存。

话说如果内存有限,缓存的RDD越来越多,spark什么时候会自动清理已经被rdd缓存占用的内存呢?

【问题讨论】:

标签: apache-spark caching spark-dataframe rdd


【解决方案1】:

Spark 将清除缓存的 RDDsDatasets / DataFrames

  • 当通过调用 RDD.unpersist (How to uncache RDD?) / Dataset.unpersist 方法或 Catalog.clearCache 明确要求时。
  • 定期发送cache cleaner

    Spark 自动监控每个节点上的缓存使用情况,并以最近最少使用 (LRU) 的方式丢弃旧数据分区。如果您想手动删除 RDD 而不是等待它从缓存中掉出,请使用 RDD.unpersist() 方法。

  • 当相应的分布式数据结构被垃圾回收时。

【讨论】:

    【解决方案2】:

    如果不再使用 RDD,Spark 将自动取消持久化/清理 RDD 或 Dataframe。要检查 RDD 是否被缓存,请检查 Spark UI 并检查 Storage 选项卡并查看 Memory 详细信息。

    在终端,我们可以使用‘rdd.unpersist()’或‘sqlContext.uncacheTable("sparktable")’

    从内存中删除 RDD 或表。 Spark 为惰性评估而设计,除非并且直到您说出任何操作,否则它不会将任何数据加载或处理到 RDD 或 DataFrame 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2016-11-29
      • 1970-01-01
      相关资源
      最近更新 更多