scala - 缓存与 localCheckpoint 以及如何阻止 Spark 删除它?

标签 scala apache-spark hadoop

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

但是,我对几个方面感到困惑。如果我执行 localCheckpoint ,并且稍后在代码中需要此 RDD,我经常会收到关于如何不再找到分区的 Exception 异常。

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

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

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

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

执行 localCheckpoint.cachecache.localCheckpoint 有什么作用吗?或者其中之一就足够了?

最佳答案

您需要使用 localCheckpointcheckpoint 的原因是什么?当使用 localCheckpoint 时,您的截断不进行复制,速度更快,但可靠性较差,这可能是您遇到麻烦的地方。

保存位置的一般差异:

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

更多详细信息(强烈推荐阅读):

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

Does doing localCheckpoint.cache or cache.localCheckpoint do anything ? Or one or the other is enough ?

检查点之前

缓存checkpoint 在它自己的作业上运行,因此如果 RDD 被缓存,它将从缓存中提取而不是重新运行它。

关于scala - 缓存与 localCheckpoint 以及如何阻止 Spark 删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52651282/

相关文章:

Scala:如何解释foldLeft

scala - 计算spark scala中文本文件中数字的平均值

hadoop - HBase独立模式功能

scala - cassie 与 cassandra 2.0.1 和 scala 2.10.2 的依赖关系

scala - IntelliJ : “Output exceeds cutoff limit” in scala worksheet

scala - 订购 RDD[String]

apache-spark - 读取 Spark 中嵌套文件夹中的所有文件

java - 线程 “main”中的异常java.lang.OutOfMemoryError:槽中的Java堆空间

hadoop - 在 Hive 中需要有关日期功能的帮助

Scala:将参数名称和类型存储在 HashMap 中