rdd.cache()
rdd.persist(storagelevel.memory_only)
persist方式可選取以下不同方式持久化memory_and_disk #如果記憶體不夠再存磁碟
disk_only
memory_only_ser #存資料時候實現序列化 可節省記憶體,但是讀取時要反序列化,耗cpu,衡量
memory_only_2 #每份資料存兩份
off_heap
選取方案1、優先選擇memory_only,如果可以用記憶體快取所有資料,那麼久意味著我們的計算是純記憶體的計算,速度當然快。
2、memory_only快取不了所有的資料,memory_only_ser 把資料實現序列化進行儲存,節省記憶體。這樣也是純記憶體操作,速度也快,只不過需要耗費cpu資源反序列化。
3、可以使用帶_2這種方式,恢復的時候可以使用備份,不需要重新計算。
4、能不適用disk的,就不適用disk,有時候從磁碟讀,還不如重新計算一次
其他:
1、什麼是tachyon?
tachyon是乙個記憶體分布式檔案系統,hdfs是基於磁碟,他是介於計算層和儲存層之間的,我們可以簡單的理解為儲存層在記憶體內的乙個快取系統 ,是乙個開源系統,是乙個以jvm為基礎的系統
2、為什麼會出現tachyon?發現以記憶體替換磁碟,就可以明顯的減少延時,所以就湧現出來很多基於記憶體的計算工具,比較出名的就是spark這個計算框架
1、spark執行以jvm為基礎,所以spark的任務會把資料存入jvm的堆中,隨著計算的迭代,jvm堆中存放的資料量迅速增大,對於spark而言,spark計算引擎和儲存引擎處在同乙個jvm中,所以會有重複的gc方面的開銷,這樣就增大了系統的延時。
2、當jvm崩潰時,快取在jvm的資料也會消失,這個時候spark不得不根據rdd的血緣關係重新計算資料
3、如果spark需要和其他框架共享資料,比如hadoop的mapreduce,這個時候就必須通過第三方來共享,比如借助hdfs,那麼這樣的話,就需要額外的開銷(磁碟io)。
因為我們基於記憶體的分布式計算框架有以上的問題,那麼就促使記憶體分布式檔案系統的誕生,比如tachyon,tachyon可以解決什麼問題?
如果我們把資料存到tachyon:
1、減少spark gc的開銷。
2、當spark的jvm崩潰時,存放在tachyon上的資料不受影響。
3、spark如果要想跟別的計算工具共享資料,只要通過tachyon的client就可以做到了,並且延遲遠低於hdfs等系統
spark複習筆記 6 RDD持久化
在spark中最重要的功能之一是跨操作在記憶體中持久化資料集。當你持久化乙個rdd的時候,每個節點都存放了乙個它在記憶體中計算的乙個分割槽,並在該資料集的其他操作中進行重用,持久化乙個rdd的時候,節點上的每個分割槽都會儲存到記憶體中,這使得將來的action更加的快。快取技術是迭代演算法和互動式查...
Spark效能優化 RDD持久化
如果程式中,對某乙個rdd,基於它進行了多次transformation或者action操作。那麼就非常有必要對其進行持久化操作,以避免對乙個rdd反覆進行計算。此外,如果要保證在rdd的持久化資料可能丟失的情況下,還要保證高效能,那麼可以對rdd進行checkpoint操作。除了對多次使用的rdd...
spark 中RDD的持久化原理
rdd持久化是可以手動選擇不同的策略的。比如可以將rdd持久化在記憶體中 持久化到磁碟上 使用序列化的方式持久化,多持久化的資料進行多路復用。只要在呼叫persist 時傳入對應的storagelevel即可。spark提供的多種持久化級別,主要是為了在cpu和記憶體消耗之間進行取捨。下面是一些通用...