簡體   English   中英

緩存與localCheckpoint以及如何阻止從中刪除火花?

[英]Cache vs localCheckpoint and how to stop spark from removing it?

我知道localCheckpoint刪除了重建RDD所需的歷史記錄。 並且cache正在保存RDD的當前狀態,因此不需要重建它。

但是,我在某些方面感到困惑。 如果我執行localCheckpoint ,並且稍后在我的代碼中需要此RDD,我通常會收到有關如何不再找到該分區的Exception

我查看了sparkUI中的“ Storage選項卡,它說只有一小部分RDD被保存,例如17%。

因此,我讀了更多的書,意識到火花會丟棄舊的RDD。 Spark有辦法永久保留它嗎?

另外,如果我正在執行cache而不是localCheckpoint ,是否可以解決問題? 但是這將花費一些時間,因為Spark將不得不重新計算分區?

總的來說,我只是想在工作中保留很大一部分RDD,以便能夠在最后將其合並回來,但是到我到達那里時,Spark已經將其刪除。 我該如何解決?

localCheckpoint.cachecache.localCheckpoint有什么作用嗎? 還是其中一個就足夠了?

您有理由需要使用localCheckpoint vs checkpoint嗎? 當使用localCheckpoint您的不進行復制的截斷沒有更快,但可靠性大大降低,這可能是您遇到麻煩的地方。

保存它們的一般區別:

cache正在保存到內存(如果內存很大,則將內存保存到磁盤), checkpoint直接保存到磁盤。 如果內存已滿(如果您自己或其他人在同一集群上工作),則cachepersist可能會被覆蓋,並且如果集群終止或重新啟動,則cachepersist將被清除。 checkpoint點將保留在HDFS或本地存儲中,並且只有在手動完成后才會被刪除。 每個都有不同的目的。

更多詳細信息(強烈建議閱讀):

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

做localCheckpoint.cache或cache.localCheckpoint有什么作用嗎? 還是其中一個就足夠了?

checkpoint之前cache checkpoint在自己的工作上運行,因此,如果緩存了RDD,它將從緩存中提取而不是重新運行它。

如果您想將RDD長時間保存在內存中, spark.dynamicAllocation.cachedExecutorIdleTimeout設置為較高的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM