Spark的儲存管理

2021-07-09 07:44:45 字數 1234 閱讀 2835

功能上看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將經常被重要的資料快取到記憶體中以提公升資料讀取速度,...