原文:https://developer.aliyun.com/ask/256229?spm=a2c6h.13066369.0.0.ea2f1aaaUQNrhg
spark所有復雜一點的算法都會有persist身影,spark默認數據放在內存,spark很多內容都是放在內存的,非常適合高速迭代,1000個步驟 只有第一個輸入數據,中間不產生臨時數據,但分布式系統風險很高,所以容易出錯,就要容錯,rdd出錯或者分片可以根據血統算出來,如果沒有對父rdd進行persist 或者cache的化,就需要重頭做。 以下場景會使用persist
1)某個步驟計算非常耗時,需要進行persist持久化 。
2)計算鏈條非常長,重新恢復要算很多步驟,很好使,persist。
3)checkpoint所在的rdd要持久化persist, lazy級別,框架發現有checnkpoint,checkpoint時單獨觸發一個job,需要重算一遍,checkpoint前 要持久化,寫個rdd.cache或者rdd.persist,將結果保存起來,再寫checkpoint操作,這樣執行起來會非常快,不需要重新計算rdd鏈條了。checkpoint之前一定會進行persist。
4)shuffle之后為什么要persist,shuffle要進性網絡傳輸,風險很大,數據丟失重來,恢復代價很大
5)shuffle之前進行persist,框架默認將數據持久化到磁盤,這個是框架自動做的。