[英]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.cache
或cache.localCheckpoint
有什么作用嗎? 還是其中一個就足夠了?
您有理由需要使用localCheckpoint
vs checkpoint
嗎? 當使用localCheckpoint
您的不進行復制的截斷沒有更快,但可靠性大大降低,這可能是您遇到麻煩的地方。
保存它們的一般區別:
cache
正在保存到內存(如果內存很大,則將內存保存到磁盤), checkpoint
直接保存到磁盤。 如果內存已滿(如果您自己或其他人在同一集群上工作),則cache
和persist
可能會被覆蓋,並且如果集群終止或重新啟動,則cache
和persist
將被清除。 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.