1. 程式人生 > >Spark-rdd的持久化

Spark-rdd的持久化

Spark 最重要的一個功能是它可以通 過 各種操作( operations )持久化(或者 緩 存)一個集合到記憶體中。當你持久化一個 RDD 的 時 候,每一個 節 點都將參與 計 算的所有分割槽資料存 儲 到記憶體中,並且 這 些 資料可以被 這 個集合(以及 這 個集合衍生的其他集合)的 動 作( action )重複利用。 這 個能力使後 續 的 動 作速度更快(通常快 10 倍以上)。 對應 迭代演算法和快速的互動使用來 說 , 緩 存是一個關 鍵 的工具。你能通 過 persist() 或者 cache() 方法持久化一個 rdd 。首先,在 action 中 計 算得到 rdd ;然後,將其儲存在每個 節 點的記憶體中。Spark的 緩 存是一個容 錯 的技 術 -如果RDD的任何一個分割槽 丟 失,它 可以通 過 原有的 轉換 ( transformations )操作自 動 的重複 計 算並且 創 建出 這 個分割槽。此外,我 們 可以利用不同的存 儲級別 存 儲 每一個被持久化的RDD。例如,它允 許 我 們 持久化
集合到磁碟上、將集合作為序列化的 Java 物件持久化到記憶體中、在節點間複製集合或者儲存集合到 Tachyon中。我 們 可以通 過傳遞 一個 StorageLevel 對 象 給 persist() 方法 設 置 這 些儲存級別 。 cache() 方法使用了默 認 的存 儲級別— StorageLevel.MEMORY_ONLY 。
完整的存 儲級別介紹如下所示:
這裡寫圖片描述


Spark也會自動持久化一些shuffle操作(如 reduceByKey )中的中間資料,即使使用者沒有呼叫 persist 方法。 這樣 的好 處 是避免了在shuffle出 錯 情況下,需要重複 計 算整個 輸 入。如果使用者計劃重用 計算過程中產生的RDD,推薦呼叫 persist 方法。

如何 選擇 存 儲級別

Spark的多個儲存級別意味著在記憶體利用率和cpu利用效率間的不同權衡。通過下面的過程選擇一個合適的儲存級別:如果你的RDD適合預設的儲存級別(MEMORY_ONLY),就選擇預設的儲存級別。因為這 是cpu利用率最高的 選項 ,會使RDD上的操作儘可能的快。如果不適合用默 認 的 級別 , 選MEMORY_ONLY_SER。 選擇 一個更快的序列化 庫 提高物件的空間使用率,但是仍能夠相當快的訪問。
除非函式 計 算 RDD 的花 費較 大或者它 們 需要 過濾 大量的資料,不要將 RDD 存 儲 到磁 盤上,否 則 ,重複 計 算一個分割槽就會和重磁 盤 上 讀 取資料一 樣 慢。如果你希望更快的 錯誤 恢復,可以利用重複 (replicated) 存 儲級別 。所有的存 儲級別 都可
以通 過 重複 計 算 丟 失的資料來支援完整的容 錯 ,但是重複的資料能 夠 使你在 RDD 上 繼續運 行任 務 ,而不需要重複 計 算 丟 失的資料。在 擁 有大量記憶體的 環 境中或者多 應 用程式的 環 境中, OFF_HEAP 具有如下 優勢 :它 運 行多個 執 行者共享 Tachyon 中相同的記憶體池它 顯 著地 減 少 垃圾 回收的花 費如果 單 個的 執 行者崩 潰 , 緩 存的資料不會 丟 失。

刪 除資料

Spark 自 動 的 監 控每個 節 點 緩 存的使用情況,利用最近最少使用原 則刪 除老舊的資料。如果想手動的刪除RDD,可以使用 RDD.unpersist() 方法

相關推薦

Spark筆記整理(五):Spark RDD持久化、廣播變量和累加器

大數據 Spark [TOC] Spark RDD持久化 RDD持久化工作原理 Spark非常重要的一個功能特性就是可以將RDD持久化在內存中。當對RDD執行持久化操作時,每個節點都會將自己操作的RDD的partition持久化到內存中,並且在之後對該RDD的反復使用中,直接使用內存緩存的parti

Spark- RDD持久化

  官方原文: RDD Persistence One of the most important capabilities in Spark is persisting (or caching) a dataset in memory across operat

Spark筆記整理(十三):RDD持久化性能測試(圖文並茂)

才會 不執行 分享 綠色 做的 specified ffffff cto 最好 [TOC] 1 前言 其實在之前的文章《Spark筆記整理(五):Spark RDD持久化、廣播變量和累加器》中也有類似的測試,不過當時做的測試僅僅是在本地跑代碼,並以Java/Scala代碼

大資料之Spark(四)--- Dependency依賴,啟動模式,shuffle,RDD持久化,變數傳遞,共享變數,分散式計算PI的值

一、Dependency:依賴:RDD分割槽之間的依存關係 --------------------------------------------------------- 1.NarrowDependency: 子RDD的每個分割槽依賴於父RDD的少量分割槽。 |

Spark RDD-2-持久化&容錯機制

rdd.cache 預設呼叫persisi,之快取記憶體 def cache(): this.type = persist() rdd.persist() def persist(): this.type = persist(Sto

SPARK】- RDD持久化

因為RDD的惰性求值機制,每次遇到行動操作,都會觸發一次從頭開始的計算。這對於迭代計算而言,代價是很大的,迭代計算經常需要多次重複使用同一組資料。 因此,可以通過持久化(快取)機制避免這種重複計算的開銷 可以使用persist()方法對一個RDD標記為持久化(標記持久化:

Spark RDD或Dataframe持久化的選擇

背景 測試資料(df,dataframe格式):800萬條, 4.5G。 計算配置:每個executor的memory為20G,32個核。 測試語句:count條數—df.groupby("_90").count().show() 持久化操作 持久化操作

RDD持久化 --- Spark調優

問題:重複建立RDD 通常來說,開發一個Spark作業時,首先是建立一個初始的RDD;接著對這個RDD執行某個運算元操作,然後得到下一個RDD;以此類推,迴圈往復,直到計算出最終我們需要的結果。在這個過程中,多個RDD會通過不同的運算元操作(比如map、reduce等)串起來,這個“RDD串

大資料實時計算Spark學習筆記(8)—— RDD 持久化

1 RDD 持久化 跨操作進行RDD的記憶體式儲存; 持久化 RDD時,節點上的每個分割槽都會儲存到記憶體中; 快取技術是迭代計算和互動式查詢的重要工具; 使用 persist() 和 cache() 進行 RDD 的持久化,cache() 是 perisi

Spark:RDD操作和持久化

建立RDD 進行Spark核心程式設計時,首先要做的第一件事,就是建立一個初始的RDD。該RDD中,通常就代表和包含了Spark應用程式的輸入源資料。然後在建立了初始的RDD之後,才可以通過Spark Core提供的transformation運算元,對該RDD進行轉換,來獲取其他的RD

Spark-rdd持久化

Spark 最重要的一個功能是它可以通 過 各種操作( operations )持久化(或者 緩 存)一個集合到記憶體中。當你持久化一個 RDD 的 時 候,每一個 節 點都將參與 計 算的所有分割槽資料存 儲 到記憶體中,並且 這 些 資料可以被 這 個集

Spark核心程式設計:RDD持久化詳解

1.RDD持久化原理 1.Spark非常重要的一個功能特性就是可以將RDD持久化在記憶體中。當對RDD執行持久化操作時,每個節點都會將自己操作的RDD的partition持久化到記憶體中,並且在之後對該RDD的反覆使用中,直接使用記憶體快取的partition

spark效能調優之重構RDD架構,RDD持久化

當第一次對RDD2執行運算元,獲取RDD3的時候,就會從RDD1開始計算,就是讀取HDFS檔案,然後對RDD1執行運算元,獲取到RDD2,然後再計算,得到RDD3 預設情況下,多次對一個RDD執行運算元,去獲取不同的RDD;都會對這個RDD以及之前的父RDD,全部重新計算

Spark核心程式設計之RDD持久化詳解

RDD持久化原理 Spark非常重要的一個功能特性就是可以將RDD持久化在記憶體中。當對RDD執行持久化操作時,每個節點都會將自己操作的RDD的partition持久化到記憶體中,並且在之後對該RDD的反覆使用中,直接使用記憶體快取的partition。這樣的

spark從入門到放棄六: RDD 持久化原理

文章地址:http://www.haha174.top/article/details/252484 spark 中一個非常重要的功能特性就是可以將RDD 持久化到記憶體中。當對RDD進行持久化操作時,每個節點都會將自己操作的RDD的partition持久化

Spark效能調優之——在實際專案中重構RDD架構以及RDD持久化

一、RDD架構重構與優化是什麼。 儘量去複用RDD,差不多的RDD,可以抽取為一個共同的RDD,供後面的RDD計算時,反覆使用。 二、怎麼做? 快取級別: case "NONE" => NONE case "DISK_ONL

spark 深入學習 03】Spark RDD的蠻荒世界

解釋 不難 特性 bsp resid 易懂 優化 方式 序列 RDD真的是一個很晦澀的詞匯,他就是伯克利大學的博士們在論文中提出的一個概念,很抽象,很難懂;但是這是spark的核心概念,因此有必要spark rdd的知識點,用最簡單、淺顯易懂的詞匯描述。不想用學術話的語言來

Spark RDD

存儲系統 orm cnblogs 集合 ans transform 匹配 優化 進行 梗概: RDD 其實就是分布式的元素集合。 在Spark中,對數據的所有操作不外乎創建RDD、轉化已有RDD 以及 調用RDD 操作進行求值。而在這一切背後,Spark會自動將

Spark RDD操作記錄(總結)

操作記錄 collect () 求和 bsp 數據 排序 red cas 創建ListintRDD = sc.parallelize(List(1,2,3,4,5))過濾包含stringRDD.filter(_.contains("a")).collect()去重strin

Spark RDD轉換為DataFrame

person true line ted struct ger fields text san #構造case class,利用反射機制隱式轉換 scala> import spark.implicits._ scala> val rdd= sc.text