1)cache
cache是爲了追求計算的速度
spark中計算任務在內存中,但是結果是存儲在磁盤中的,所以首次運行會慢,之後會拿磁盤中的計算結果,所以後面會快很多
通過對結果的RDD分佈式數據集進行cache,將計算結果緩存在內存中,這樣會比緩存在磁盤中更快的讀取。
比如計算log文件的行數
scala> val rdd1 = sc.textFile("hdfs://192.168.252.121:9000/cache/itstar.log")
rdd1: org.apache.spark.rdd.RDD[String] = hdfs://192.168.252.121:9000/cache/itstar.log MapPartitionsRDD[1] at textFile at <console>:24
scala> rdd1.count
res0: Long = 8031
首次執行會花費20多秒,第二次在3秒。
在執行cache後,花費在毫秒級
scala> val rdd1 = sc.textFile("hdfs://192.168.252.121:9000/cache/itstar.log")
scala> val rdd1cache = rdd1.cache
scala> rdd1cache.count
sc.textFile的結果都存儲在內存中,所以讀取非常快
2)checkpoint
checkpoint是爲了出現機器故障後,保證數據計算結果的安全性
可以將計算的中間結果備份存儲在hdfs的某個目錄下
checkdir文件夾會自動創建
sc.checkpointDir("hdfs://192.168.252.121:9000/checkdir")
然後哪個rdd結果想先保存就可以調用checkpoint方法
scala> val rddc = rdd1.filter(_.contains("bigdata"))
scala> rddc.checkpoint
那麼rdd1過濾後的數據集將會保存在checkdir目錄中
比如調用rddc.count
rddc.count