spark中cache和checkpoint使用

2021-09-11 05:51:41 字數 1151 閱讀 9929

1)cache

cache是為了追求計算的速度

spark中計算任務在記憶體中,但是結果是儲存在磁碟中的,所以首次執行會慢,之後會拿磁碟中的計算結果,所以後面會快很多

通過對結果的rdd分布式資料集進行cache,將計算結果快取在記憶體中,這樣會比快取在磁碟中更快的讀取。

比如計算log檔案的行數

scala> val rdd1 = sc.textfile("hdfs:")

scala> rdd1.count

res0: long = 8031

首次執行會花費20多秒,第二次在3秒。

在執行cache後,花費在毫秒級

sc.textfile的結果都儲存在記憶體中,所以讀取非常快

checkpoint是為了出現機器故障後,保證資料計算結果的安全性

可以將計算的中間結果備份儲存在hdfs的某個目錄下

checkdir資料夾會自動建立

sc.checkpointdir("hdfs:")
然後哪個rdd結果想先儲存就可以呼叫checkpoint方法

scala> val rddc = rdd1.filter(_.contains("bigdata"))

scala> rddc.checkpoint

那麼rdd1過濾後的資料集將會儲存在checkdir目錄中

比如呼叫rddc.count

spark的cache和checkpoint的區別

要知道區別,就要首先知道實現的原理和使用的場景 cache就是講共用的或者重複使用的rdd按照持久化的級別進行快取。checkpoint 就是將業務非常長的邏輯計算的中間結果快取到hdfs上,他的實現原理是 首先找打stage最後的finalrdd,然後按照rdd的依賴關係回溯,找到使用checkp...

spark利用cache優化shuffle

cache表,資料放記憶體,資料被廣播到executor,將多份資料進行關聯是資料處理過程中非常普遍的用法,不過在分布式計算系統中,這個問題往往會變的非常麻煩,因為框架提供的 join 操作一般會將所有資料根據 key 傳送到所有的 reduce 分割槽中去,也就是 shuffle 的過程。造成大量...

linux記憶體中buffer和 cached的比較

經常遇到一些剛接觸linux的新手會問記憶體占用怎麼那麼多?在linux中經常發現空閒記憶體很少,似乎所有的記憶體都被系統占用了,表面感覺是記憶體不夠用了,其實不然。這是linux記憶體管理的乙個優秀特性,在這方面,區別於windows的記憶體管理。主要特點是,無論物理記憶體有多大,linux 都將...