spark快取級別
在spark中,如果乙個rdd或者dataset被多次復用,最好是對此做快取操作,以避免程式多次進行重複的計算。spark 的快取具有容錯機制,如果乙個快取的 rdd 的某個分割槽丟失了,spark 將按照原來的計算過程,自動重新計算並進行快取。
快取的使用:
val dataset = spark.read.parquet(file)
dataset.cache()
或者:dataset.persist()
cache() 跟 persist() 實際上是一樣的,都是memory_and_disk級別。如果想要控制快取級別,則需要在persist()中加上你需要快取的級別,如:
dataset.persist(storagelevel.memory_only)
快取的釋放:
dataset.unpersist()
dataset.unpersist(true) //true 指定的是是否阻塞程序,直到所有block都被刪除。
注意:如果要對某個快取進行釋放,要在action操作之後,不然該快取是無效的。快取級別:級別
使用空間
cpu時間
是否在記憶體中
是否在磁碟上
備註memory_only高低
是否memory_only_2高低
是否資料存2份
memory_only_ser_2低高
是否資料序列化,資料存2份
memory_and_disk高中等
部分部分
如果資料在記憶體中放不下,則溢寫到磁碟
memory_and_disk_2高中等
部分部分
資料存2份
memory_and_disk_ser低高
部分部分
memory_and_disk_ser_2低高
部分部分
資料存2份
disk_only低高
否是disk_only_2低高
否是資料存2份
none
off_heap
上面列表上的所有級別都是在org.apache.spark.storage.storagelevel類中如何選擇儲存級別
spark 的儲存級別的選擇,核心問題是在記憶體使用率和 cpu 效率之間進行權衡。建議按下面的過程進行儲存級別的選擇 :
Spark快取級別
惰性求值 1.定義 在rdd行動操作之前,不觸發計算。轉換操作和建立操作 控制操作均為惰性的 只有行動操作可觸發job。快取cache 1.spark的快取級別參照 org.apache.spark.storage.storagelevel.scala new storagelevel usedis...
Spark日誌級別修改
在學習使用spark的過程中,總是想對內部執行過程作深入的了解,其中debug和trace級別的日誌可以為我們提供詳細和有用的資訊,那麼如何進行合理設定呢,不複雜但也絕不是將乙個info換為trace那麼簡單。調整spark日誌級別的配置檔案是 spark home conf log4j.prope...
spark持久化(快取)
1 惰性求值 rdd轉化過程都是惰性求值的。這意味著在被呼叫行動操作之前spark不會開始計算,spark會在內部記錄下所要求執行的操作的相關資訊,我們可以把每個rdd看作我們通過轉化操作構建出來的 記錄如何計算資料的指定列表。把資料讀取到rdd的操作同樣是惰性的。2 持久化快取 sparkrdd是...