您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何理解troubleshooting 錯誤的持久化方式以及checkpoint的使用,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
來說下CheckPoint,有時候它對故障會產生效果,它最起效果的時候是什么時候呢?如果緩存BlockManager會根據你的緩存策略去把數據存到內存或者磁盤!持久化,大多數時候,都是會正常工作的。但是就怕,有些時候,會出現意外。比如說,緩存在內存中的數據,可能莫名其妙就丟失掉了。Executor進程掛掉了。或者說,存儲在磁盤文件中的數據,莫名其妙就沒了,文件被誤刪了。企業雖然沒碰到過,但是有可能。
出現上述情況的時候,接下來,如果要對這個RDD執行某些操作,可能會發現RDD的某個partition找不到了。對消失的partition重新計算,計算完以后再緩存和使用。有些時候,計算某個RDD,可能是極其耗時的。可能RDD之前有大量的父RDD。那么如果你要重新計算一個partition,可能要重新計算之前所有的父RDD對應的partition。
這種情況下,就可以選擇對這個RDD進行checkpoint,以防萬一。進行checkpoint,就是說,會將RDD的數據,持久化一份到容錯的文件系統上(比如hdfs)。在對這個RDD進行計算的時候,如果發現它的緩存數據不見了。優先就是先找一下有沒有checkpoint數據(到hdfs上面去找)。如果有的話,就使用checkpoint數據了。不至于說是去重新計算。
checkpoint,其實就是可以作為是cache的一個備胎。如果cache失效了,checkpoint就可以上來使用了。checkpoint有利有弊,利在于,提高了spark作業的可靠性,一旦發生問題,還是很可靠的,不用重新計算大量的rdd;但是弊在于,進行checkpoint操作的時候,也就是將rdd數據寫入hdfs中的時候,還是會消耗性能的。
checkpoint,用性能換可靠性。先做了緩沖后做了checkpoint,比如到HDFS那就是會從緩存存到HDFS上面進行checkpoint操作!后面我們再對這個RDD進行使用,然后其實它有個組件叫CacheManager,然后CacheManager會到BlockManager上面去找數據,如果有就通過CacheManager拿到數據,如果沒有就會從checkpoint的地方去拿數據
checkpoint原理:
在代碼中,用SparkContext,設置一個checkpoint目錄,可以是一個容錯文件系統的目錄,比如hdfs;
在代碼中,對需要進行checkpoint的rdd,執行RDD.checkpoint();
RDDCheckpointData(spark內部的API),接管你的RDD,會標記為marked for checkpoint,準備進行checkpoint
你的job運行完之后,會調用一個finalRDD.doCheckpoint()方法,會順著rdd lineage,回溯掃描,發現有標記為待checkpoint的rdd,就會進行二次標記,inProgressCheckpoint,正在接受checkpoint操作
job執行完之后,就會啟動一個內部的新job,去將標記為inProgressCheckpoint的rdd的數據,都寫入hdfs文件中。(備注,如果rdd之前cache過,會直接從緩存中獲取數據,寫入hdfs中;如果沒有cache過,那么就會重新計算一遍這個rdd,再checkpoint)
將checkpoint過的rdd之前的依賴rdd,改成一個CheckpointRDD*,強制改變你的rdd的lineage。后面如果rdd的cache數據獲取失敗,直接會通過它的上游CheckpointRDD,去容錯的文件系統,比如hdfs中,獲取checkpoint的數據。
說一下checkpoint的使用
SparkContext,設置checkpoint目錄
對RDD執行checkpoint操作
上述內容就是如何理解troubleshooting 錯誤的持久化方式以及checkpoint的使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。