缓存与localCheckpoint以及如何阻止从中删除火花?

时间:2018-10-04 16:13:41

标签: scala apache-spark hadoop

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

但是,我在某些方面感到困惑。如果我做了localCheckpoint,并且稍后在我的代码中需要此RDD,我通常会得到一个Exception,关于如何不再找到该分区。

我查看了sparkUI中的Storage标签,它说保存的RDD仅占一小部分,例如17%。

因此,我读了更多的书,意识到火花会丢弃旧的RDD。 Spark有办法永久保留它吗?

此外,如果我不是用cache而是用localCheckpoint,是否可以解决问题?但是这将花费一些时间,因为Spark将不得不重新计算分区?

总体而言,我只想将RDD保留在我的工作的很大一部分中,以便能够在最后将其合并回去,但是到我到达那里时,Spark已将其删除。我该如何解决?

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

2 个答案:

答案 0 :(得分:0)

您是否有必要使用localCheckpointcheckpoint?在使用localCheckpoint时,您的无用复制被截断了,虽然速度更快但可靠性低得多,这可能是您遇到麻烦的地方。

保存位置的一般差异:

cache正在保存到内存(如果将其大到将mem存储到磁盘),则checkpoint直接保存到磁盘。如果内存已满(您自己或其他人在同一集群上工作),cachepersist可能会被覆盖,并且如果集群终止或重新启动,则会被清除。 checkpoint将保留在HDFS或本地存储中,并且只有在手动完成后才会被删除。每个都有不同的目的。

更多详细信息(强烈建议阅读):

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

  

执行localCheckpoint.cache或cache.localCheckpoint可以做什么吗?或一个就足够了吗?

cache,然后再checkpointcheckpoint自行运行,因此如果缓存了RDD,它将从缓存中提取而不是重新运行它。

答案 1 :(得分:0)

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