RDD的容錯機制
RDD實現了基於Lineage的容錯機制。RDD的轉換關系,構成了compute chain,可以把這個compute chain認為是RDD之間演化的Lineage。在部分計算結果丟失時,只需要根據這個Lineage重算即可。
圖1中,假如RDD2所在的計算作業先計算的話,那么計算完成后RDD1的結果就會被緩存起來。緩存起來的結果會被后續的計算使用。圖中的示意是說RDD1的Partition2緩存丟失。如果現在計算RDD3所在的作業,那么它所依賴的Partition0、1、3和4的緩存都是可以使用的,無須再次計算。但是Partition2由於緩存丟失,需要從頭開始計算,Spark會從RDD0的Partition2開始,重新開始計算。
內部實現上,DAG被Spark划分為不同的Stage,Stage之間的依賴關系可以認為就是Lineage。關於DAG的划分可以參閱第4章。
提到Lineage的容錯機制,不得不提Tachyon。Tachyon包含兩個維度的容錯,一個是Tachyon集群的元數據的容錯,它采用了類似於HDFS的Name Node的元數據容錯機制,即將元數據保存到一個Image文件,並且保存了元數據變化的編輯日志(EditLog)。另外一個是Tachyon保存的數據的容錯機制,這個機制類似於RDD的Lineage,Tachyon會保留生成文件數據的Lineage,在數據丟失時會通過這個Lineage來恢復數據。如果是Spark的數據,那么在數據丟失時Tachyon會啟動Spark的Job來重算這部分內容。如果是Hadoop產生的數據,那么重新啟動相應的Map Reduce Job就可以。現在Tachyon的容錯機制的實現還處於開發階段,並不推薦將這個機制應用於生產環境。不過,這並不影響Spark使用Tachyon。如果Spark保存到Tachyon的部分數據丟失,那么Spark會根據自有的容錯機制來重算這部分數據。

圖1 RDD的部分緩存丟失的邏輯圖
同時,大家可以關注我的個人博客:
http://www.cnblogs.com/zlslch/ 和 http://www.cnblogs.com/lchzls/
人生苦短,我願分享。本公眾號將秉持活到老學到老學習無休止的交流分享開源精神,匯聚於互聯網和個人學習工作的精華干貨知識,一切來於互聯網,反饋回互聯網。
目前研究領域:大數據、機器學習、深度學習、人工智能、數據挖掘、數據分析。 語言涉及:Java、Scala、Python、Shell、Linux等 。同時還涉及平常所使用的手機、電腦和互聯網上的使用技巧、問題和實用軟件。 只要你一直關注和呆在群里,每天必須有收獲
以及對應本平台的QQ群:161156071(大數據躺過的坑)



