spark的持久化

2021-09-02 06:10:37 字數 2425 閱讀 2488

預設將rdd的資料持久化到記憶體中。cache是懶執行。

注意:cache () = persist()

=persist(storagelevel.memory_only)

可以指定持久化的級別。最常用的是memory_only和memory_and_disk。」_2」表示有副本數。

cache和persist注意事項:

cache和persist都是懶執行,必須有乙個action類運算元觸發執行。

cache和persist運算元的返回值可以賦值給乙個變數,在其他job中直接使用這個變數就是使用持久化的資料了。持久化的單位是partition。

cache和persist運算元後不能立即緊跟action運算元。

錯誤:rdd.cache().count() 返回的不是持久化的rdd,而是乙個數值了

checkpoint將rdd持久化到磁碟,還可以切斷rdd之間的依賴關係。

checkpoint 的執行原理:

當rdd的job執行完畢後,會從finalrdd從後往前回溯。

當回溯到某乙個rdd呼叫了checkpoint方法,會對當前的rdd做乙個標記。

spark框架會自動啟動乙個新的job,重新計算這個rdd的資料,將資料持久化到hdfs上。

優化:對rdd執行checkpoint之前,最好對這個rdd先執行cache,這樣新啟動的job只需要將記憶體中的資料拷貝到hdfs上就可以,省去了重新計算這一步。

rdd.scala

/** persist this rdd with the default storage level (`memory_only`). */

def persist(): this.type = persist(storagelevel.memory_only)

/** persist this rdd with the default storage level (`memory_only`). */

def cache(): this.type = persist()

storagelevel.scala

class storagelevel private(

private var _usedisk: boolean, //是否使用磁碟

private var _usememory: boolean, //是否使用記憶體

private var _useoffheap: boolean, //是否使用堆外記憶體(主要指tachyon)

private var _deserialized: boolean, //是否不序列化

private var _replication: int = 1) //副本數量

extends externalizable

/** * created by qiuyang on 2018/11/30.

* * 持久化運算元

* cache/persist/checkpoint,均為懶執行運算元,需要action運算元觸發執行

* 三個持久化運算元,持久化的單位都是partition

* 1.cache: 預設將rdd中的資料儲存在記憶體中

* 2.persist(): 可選擇儲存方式,persist(storagelevel.memory_only)=cache()=persist()

* *cache和persist注意:

* >cache和persist都是懶執行,需要actio運算元觸發執行

* >對乙個rdd cache或persist之後可以賦值給乙個變數,下次直接使用這個變數就是使用持久化的rdd

* >如果賦值給乙個變數,那麼cache和persist之後不能緊跟action運算元

* 3.checkponit: 會封裝job執行

* */

object cachedemo

}

checkponitdemo.scala

package com.qiuyang.scala

import org.apache.spark.rdd.rdd

import org.apache.spark.

/** * created by qiuyang on 2018/11/30.

* checkpoint持久化--會封裝乙個job

* 特點:

* 1.將資料儲存再磁碟中,一定要先用sc.setcheckpointdir指定儲存路徑

* 2.切斷了與前面rdd的聯絡

* 4.某些特定場景,必須用checkpoint

* 5.checkpoint是懶載入,且它會再job執行完成之後,spark自動封裝job去執行

*/object checkponitdemo

}

spark的持久化

原文 spark所有複雜一點的演算法都會有persist身影,spark預設資料放在記憶體,spark很多內容都是放在記憶體的,非常適合高速迭代,1000個步驟 只有第乙個輸入資料,中間不產生臨時資料,但分布式系統風險很高,所以容易出錯,就要容錯,rdd出錯或者分片可以根據血統算出來,如果沒有對父r...

spark持久化(快取)

1 惰性求值 rdd轉化過程都是惰性求值的。這意味著在被呼叫行動操作之前spark不會開始計算,spark會在內部記錄下所要求執行的操作的相關資訊,我們可以把每個rdd看作我們通過轉化操作構建出來的 記錄如何計算資料的指定列表。把資料讀取到rdd的操作同樣是惰性的。2 持久化快取 sparkrdd是...

spark筆記 RDD的持久化

rdd.cache rdd.persist storagelevel.memory only persist方式可選取以下不同方式持久化memory and disk 如果記憶體不夠再存磁碟 disk only memory only ser 存資料時候實現序列化 可節省記憶體,但是讀取時要反序列化...