Spark cache、checkpoint機制筆記

Spark學習筆記總結緩存

03. Spark cache和checkpoint機制

1. RDD cache緩存

當持久化某個RDD後,每個節點都將把計算的分片結果保存在內存中,並在對此RDD或衍生出的RDD進行的其餘動做中重用(不須要從新計算)。這使得後續的動做變得更加迅速。RDD相關的持久化和緩存,是Spark最重要的特徵之一。學習

val rdd = sc.textFile("hdfs://172.23.27.19:9000/wrd/wc/srcdata/").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
rdd.cache()//如今沒有緩存
rdd.collect//遇到action開始緩存

.cache()是一個transformation。在job的storage頁面也能夠看到緩存信息。.unpersist(true)釋放這個資源spa

設置緩存方式
RDD經過persist方法設置。默認的存儲級別都是僅在內存存儲一份,Spark的存儲級別還有好多種,存儲級別在object StorageLevel中定義的。

能夠設置在內存、硬盤、還有份數。code

2. checkpoint容錯機制

緩存有可能丟失,或者存儲存儲於內存的數據因爲內存不足而被刪除。經過基於RDD的一系列轉換,丟失的數據會被重算,因爲RDD的各個Partition是相對獨立的,所以只須要計算丟失的部分便可,並不須要重算所有Partition。
可是,屢次迭代後數據丟失的從新計算,會影響這個效率。所以,RDD的緩存容錯機制保證了即便緩存丟失也能保證快速的恢復,而不是從新計算。orm

checkpoint保存的目錄是在HDFS目錄中,保證了存儲的可靠性。對象

sc.setCheckpointDir("hdfs://master:9000/..")//會在..目錄建立一個文件夾
//對象面的rdd設置checkpoint
rdd.checkpoint
rdd.collect

checkpoint和cache同樣,是transformation
當遇到action時,checkpoint會啓動另外一個任務,將數據切割拆分,保存到設置的checkpoint目錄中。內存

在Spark的checkpoint源碼中提到,資源

  1. 當使用了checkpoint後,數據被保存到HDFS,此RDD的依賴關係也會丟掉,由於數據已經持久化到硬盤,不須要從新計算。
  2. 強烈推薦先將數據持久化到內存中(cache操做),不然直接使用checkpoint會開啓一個計算,浪費資源。

初接觸,記下學習筆記,還有不少問題,望指導,謝謝。源碼

相關文章
相關標籤/搜索