Spark RDD Cache快取使用詳解

2021-08-20 07:35:30 字數 1318 閱讀 8400

1.概述

2.快取型別

3.如何選擇快取型別

4.移除快取資料

1.概述

spark的開發調優有乙個原則,即對多次使用的rdd進行持久化。如果要對乙個rdd進行持久化,只要對這個rdd呼叫cache()和persist()即可。

1.1 cache()方法表示:使用非序列化的方式將rdd的資料全部嘗試持久化到記憶體中,cache()只是乙個transformtion,是lazy的,必須通過乙個action觸發,才能真正的將該rdd cache到記憶體中。

1.2 persist()方法表示:手動選擇持久化級別,並使用指定的方式進行持久化。

2.快取型別

none :什麼型別都不是

disk_only:磁碟

disk_only_2:磁碟;雙副本

memory_only: 記憶體;反序列化;把rdd作為反序列化的方式儲存,假如rdd的內容存不下,剩餘的分割槽在以後需要時會重新計算,不會刷到磁碟上。

memory_only_2:記憶體;反序列化;雙副本

memory_only_ser:記憶體;序列化;這種序列化方式,每乙個partition以位元組資料儲存,好處是能帶來更好的空間儲存,但cpu耗費高

memory_only_ser_2 : 記憶體;序列化;雙副本

memory_and_disk:記憶體 + 磁碟;反序列化;雙副本;rdd以反序列化的方式存記憶體,假如rdd的內容存不下,剩餘的會存到磁碟

memory_and_disk_2 : 記憶體 + 磁碟;反序列化;雙副本

memory_and_disk_ser:記憶體 + 磁碟;序列化

memory_and_disk_ser_2:記憶體 + 磁碟;序列化;雙副本

*****

****** 序列化能有效減少儲存空間,預設memory_only

3.如何選擇儲存級別

如果rdd對於預設的儲存級別是滿足的,就不要選擇其他了。這是效能最優的,最高效的(前提記憶體要足夠,這是第一選擇)

不要把資料寫到磁碟,成本是非常高的。當資料太大的時候,可以過濾一部分資料再存,這樣的話可能會更快

可以使用副本的儲存級別能更快的容錯,所以的storage level都提供了副本機制,這個機制能讓你繼續再rdd上執行task,並不需要等待重新計算。(從另外的節點拿)

ps:首選第1種方式,滿足不了再使用第2種。後兩種不推薦

4.移除快取資料

spark會自動地監控每個節點的使用情況,以一種lru的機制(least-recently-used:最近很少使用)去自動移除。如果想手工代替這種自動去移除,可以使用rdd.unpersist()去處理

快取雪崩 快取穿透 快取預熱 快取更新 快取降級

簡介 快取同一時間大面積的失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。解決辦法 中華石杉老師 簡介 一般是黑客故意去請求快取中不存在的資料,導致所有的請求都落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。解決辦法 最常見的則是採用布隆過濾器,將所有可能存在的資料...

快取穿透 快取併發 快取雪崩 快取預熱

快取穿透 快取併發和快取雪崩是常見的由高併發引起的快取問題,而快取預熱是快取雪崩的一種解決方案。快取穿透指的是併發使用大量快取中不存在的key進行查詢,由於快取無法命中,大量的查詢會穿過快取直接查詢資料庫,使得資料庫壓力太大,導致資料庫可能被拖垮。一般是受到了惡意的攻擊才會導致這種問題,所以一旦遇到...

快取 一 快取穿透 快取擊穿 快取雪崩

一 快取穿透 使用者請求的資料在快取和資料庫中都沒有,使用者卻還是一直在請求,造成資料庫大量無用資料庫操作,造成資源浪費。這種情況很可能是被攻擊了。解決方式 1 快取空資料 缺點 造成空間浪費,可以對資料設定有效期。2 布隆過濾器 二 快取擊穿 使用者請求資料快取中不存在,資料庫中存在。同時使用者併...