【问题标题】:Cache vs localCheckpoint and how to stop spark from removing it?缓存与 localCheckpoint 以及如何阻止 spark 删除它?
【发布时间】:2018-10-04 16:13:40
【问题描述】:

我了解localCheckpoint 删除了重建 RDD 所需的历史记录。 cache 正在保存 RDD 的当前状态,因此它不需要重建它。

但是,我在几个方面感到困惑。如果我这样做 localCheckpoint ,并且稍后在我的代码中需要这个 RDD,我经常会得到一个 Exception 关于如何不再找到分区的信息。

我查看了 sparkUI 中的 Storage 选项卡,它说只有一小部分 RDD 被保存,比如 17%。

所以我阅读了更多内容并意识到 spark 会丢弃旧的 RDD。有没有办法让 Spark 永远保留它?

另外,如果我使用cache 而不是localCheckpoint,问题会解决吗?但这只是需要时间,因为 Spark 必须重新计算分区?

总的来说,我只是想在内存中保留一个 RDD,以便在我的大部分工作中能够在最后将它合并回来,但是当我到达那里时,Spark 已经将它删除了。我该如何解决?

localCheckpoint.cachecache.localCheckpoint 有什么作用吗?或者一个或另一个就足够了?

【问题讨论】:

标签: scala apache-spark hadoop


【解决方案1】:

您是否有理由需要使用 localCheckpointcheckpoint?当使用localCheckpoint 时,您的截断不带复制,速度更快但可靠性更低,这可能是您遇到问题的地方。

保存位置的一般差异:

cache 正在保存到内存(如果内存到磁盘很大),checkpoint 正在直接保存到磁盘。 cachepersist 可以在内存填满时被覆盖(你自己或其他人,如果他们在同一个集群上工作),如果你的集群被终止或重新启动,它们将被清除。 checkpoint 将持久保存到 HDFS 或本地存储,并且只有在手动完成时才会被删除。每个都有不同的目的。

更多细节(强烈推荐阅读):

https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/6-CacheAndCheckpoint.md

做 localCheckpoint.cache 或 cache.localCheckpoint 有什么作用吗?或者一个或另一个就足够了?

cache 在你之前checkpointcheckpoint 在它自己的工作上运行,所以如果 RDD 被缓存,它将从缓存中提取而不是重新运行它。

【讨论】:

  • persist(Disk)checkpoint 怎么样? checkpointlocalCheckpoint 都在删除历史记录,对吧? (checkpoint == persist(Disk) + 删除历史记录) 和 (localCheckpoint == persist(memory) + 删除历史记录) 也是如此?
【解决方案2】:

如果您想在工作的很长一段时间内将RDD 保留在内存中,请将spark.dynamicAllocation.cachedExecutorIdleTimeout 设置为较高的值。

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2018-01-09
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多