功能上看spark的儲存管理模型可以分為兩部分:rdd快取和shuffle資料的持久化.rdd快取,指的是rdd呼叫cache(),persist()或checkpoint,呼叫這個三個方法會將rdd對應的資料塊結果儲存到記憶體或者磁碟中,可以將寬依賴的結果儲存下來.
shuffle資料持久化**說明:
def
testshuffleandcache
():unit
=val
srcrdd = sc.parallelize(a1 zip a2)
/**shuffle
持久化不能儲存
map的結果,因為
map是寬依賴
,但是如果在
map後面加
cache/persist
就能將map
結果儲存下來
*/val
sortedrdd = srcrdd.sortby(x=>x._1).sortby(x=>x._2).sortby(x=>x._1).sortby(x=>x._2).map(_._1)
/**以下sortedrdd
第一次被執行
,檢視前段的日誌輸出的時候
,會發現輸出結果之前執行了5個
stages*/
println
(sortedrdd.count())
/**以下sortedrdd
不是第一次執行了
,sortedrdd
已經儲存了最後一次
shuffle
的資料,
所以只執行了乙個
stage*/
println
(sortedrdd.count())
}
在這裡有必要說一下spark的cache,cache只適合使用在不太大的rdd中,如果rdd太大不要使用cache,使用persist或者checkpoint,因為cache是將整個rdd存在記憶體中,rdd太大的話顯然是放不下的。這裡舉個例子:
假設有100g的資料要處理,每個塊128m,在分布式中,是每個core每次只將乙個塊讀入記憶體中的,每次處理完乙個再讀取下乙個入記憶體,上乙個的處理結果存入磁碟,所以才能處理無窮大的資料量,但是cache是將所有資料存入記憶體,所以10g的機子肯定不可能cache 100g的資料。
初始spark 四 之spark儲存管理
我們在使用spark進行資料相關的操作的時候,經常會用到的是rdd,但是我們也都知道rdd是乙個抽象的資料集,並不是真正的資料儲存的地方,rdd使我們對資料的操作更方便,其實rdd的出現避免了我們對資料儲存底部的接觸,可以更方便的編寫我們的應用。其實資料的儲存都是由spark的儲存管理模組實現和管理...
Spark 儲存管理之BlockManger
spark 儲存管理之blockmanger 睡著的水 hzjs 2016.08.24 一 blockmanager 執行 a blockmanagermaster 對整個集群的block資料進行管理的 2 blockmanagermasterendpoint 本身是乙個訊息體,會負責通過遠端訊息通...
Spark的資料儲存(十九)
spark本身是基於記憶體計算的架構,資料的儲存也主要分為記憶體和磁碟兩個路徑。spark本身則根據儲存位置 是否可序列化和副本數目這幾個要素將資料儲存分為多種儲存級別。此外還可選擇使用tachyon來管理記憶體資料。為了適應迭代計算,spark將經常被重要的資料快取到記憶體中以提公升資料讀取速度,...