更新時間:2017-09-01 來源:黑馬程序員云計算大數(shù)據(jù)培訓學院 瀏覽量:
三,對公用的RDD進行持久化
持久化場景:對于一個RDD被多次引用到,并且這個RDD計算過程復雜,計算時間特別耗 時,那么就可以對這個RDD進行持久化
如何進行持久化:調(diào)用RDD.persist(), 或者RDD.cache()
【注意】cache方法的底層就是調(diào)用persist方法
如果對RDD做持久化,默認持久化級別是StorageLevel.MEMEORY_ONLY ,也就是持久化到內(nèi)存中去,這種持久化級別效率是最快的,但是由于是純Java對象保存到內(nèi)存中,那么內(nèi)存可能保存的數(shù)據(jù)就會較少
如果當我們集群資源有限時,那么我們可以采用MEMORY_ONLY_SER,也就是將Java對象進行序列化之后再持久化到內(nèi)存中去,這種持久化的好處是能夠持久化更多的數(shù)據(jù)到內(nèi)存中,但是持久化時需要序列化,取出來又需要反序列化這一過程,性能相對于MEMORY_ONLY這種持久化要稍微弱點,但是還是比較高效的
如何選擇RDD持久化策略
Spark提供的多種持久化級別,主要是在CPU和內(nèi)存之間進行取舍,下面是一些通用的持久化級別的選擇建議:
1、有限使用MEMORY_ONLY,如果可以緩存所有數(shù)據(jù)的話,那么就使用這種策略,因為春內(nèi)村速度最快,而且沒有序列化,不需要消耗CPU進行反序列化操作
2、如果MEMORY_ONLY策略,無法存儲所有的數(shù)據(jù)的話,那么使用MEMORY_ONLY_SER,將數(shù)據(jù)進行序列化存儲,純內(nèi)存操作還是非常快的,只是要消耗CPU進行反序列化
3、如果需要進行快速的失敗恢復,那么就選擇帶后綴為_2的策略,進行數(shù)據(jù)的備份,這樣在失敗時,就不需要重新計算了
4、能不適用DISK相關(guān)的策略,就不要使用,有的時候,從磁盤讀取數(shù)據(jù)還不如重新計算一次
云計算大數(shù)據(jù)培訓之Spark調(diào)優(yōu)(1)
2017-09-01云計算大數(shù)據(jù)培訓之Hadoop組件:zookeeper(3)
2017-09-01云計算大數(shù)據(jù)培訓之Hadoop組件:zookeeper(2)
2017-09-01云計算大數(shù)據(jù)培訓之Hadoop組件:zookeeper(1)
2017-09-01云計算大數(shù)據(jù)培訓之Spark-Streaming的基本原理以及預寫日志機制和checkpoint(3)
2017-09-01云計算大數(shù)據(jù)培訓之Spark-Streaming的基本原理以及預寫日志機制和checkpoint(2)
2017-09-01