rdd通過persist方法或cache方法可以將前面的計算結果快取,預設情況下persist() 會把資料以序列化的形式快取在jvm 的堆空間中。
但是並不是這兩個方法被呼叫時立即快取,而是觸發後面的action時,該rdd的計算結果將會被快取在計算節點的記憶體中,並供後面重用。
示例如下:
def main(args: array[string]): unit =
如果不加persist方法,執行結果如下:
hello1582190762213
hello1582190762463
hello1582190762526
加了persist方法之後,執行結果變為:
hello1582190869308
hello1582190869308
hello1582190869308
可見:current這個rdd的計算結果被快取起來了 ,下游的rdd直接從快取拿資料並進行運算。rdd及其rdd上游的計算過程被省略了,從而加快了計算過程。
儲存級別:
object storagelevel
不加checkpoint的列印結果:
從頭開始記錄;
加了checkpoint之後的列印結果:
檢查點所在rdd之前的rdd的血緣資訊被檢查點資訊所替代。
接下來考察檢查點之前的rdd會不會被重複計算:
def main(args: array[string]): unit =
列印結果如下:
(1582193859704,1)
(1582193859704,1)
(1582193859704,1)
證明檢查點之間的rdd沒有被重複計算。
RDD的檢查點(checkpoint)機制
rdd的快取能夠在第一次計算完成後,將計算結果儲存到記憶體 本地檔案系統或者tachyon中。通過快取,spark避免了rdd上的重複計算,能夠極大地提公升計算速度。但是,如果快取丟失了,則需要重新計算。如果計算特別複雜或者計算耗時特別多,那麼快取丟失對於整個job的影響是不容忽視的。為了避免快取丟...
檢查點 為什麼要插入檢查點 檢查點的作用
一 為什麼要插入檢查點 檢查點的作用 檢查點記錄被測系統的預期結果,在執行過程中,qtp將預期結果與實際執行結果進行比較,若一致,測試結果報告中,檢查點為passed,否則為failed。只有插入檢查點的 才具有測試能力,檢查功能點是否實現 二 標準檢查點 standard checkpoint 檢...
RDD 中的檢查點機制的理解
檢查點機制目的 資料的持久化 安全性 hdfs 檢查點機制適用場合 dga 中的 lineage過長 在寬依賴上設定 檢查點 更好 檢查點 將 rdd 的資料進行持久化到檔案系統 hdfs 中 問題 checkpoint 執行跟 cache 一樣麼?如下 這裡的 hdfs 路徑注意自己本地 host...