初始spark 四 之spark儲存管理

2021-10-06 01:18:02 字數 1286 閱讀 7033

我們在使用spark進行資料相關的操作的時候,經常會用到的是rdd,但是我們也都知道rdd是乙個抽象的資料集,並不是真正的資料儲存的地方,rdd使我們對資料的操作更方便,其實rdd的出現避免了我們對資料儲存底部的接觸,可以更方便的編寫我們的應用。其實資料的儲存都是由spark的儲存管理模組實現和管理的。

spark儲存管理模組的整體架構:從架構上可以將儲存架構管理模組分為通訊層和儲存層兩個部分。

通訊層:儲存管理模組採用的是主從架構來實現通訊層,主節點和從節點之間傳輸控制資訊、狀態資訊。

儲存層:儲存管理模組將資料儲存到硬碟或者記憶體中,必要時還需要將資料複製到遠端,這些操作都是由儲存層來實現和提供相應的介面的。

從功能上看儲存管理模組又可以分為rdd快取和shuffle資料的持久化。

rdd快取:整個儲存管理模組主要的工作是作為rdd的快取,包括基於記憶體和磁碟的快取

shuffle資料的持久化:shuffle之後的結果也是交給儲存管理模組進行相應的整理的。shuffle效能的好壞直接會影響整個spark應用的效能,因此儲存管理模組中對於shuffle資料的處理有別於傳統的rdd快取。

從通訊的層面來看:我們知道對於spark的儲存結構是主從結構,包括還有驅動器和執行器的結構,通訊包括主從之間的通訊,以及驅動器與執行器間的通訊,在進行通訊的時候首先每個節點都需要註冊儲存管理模組,即從結構節點將自己的儲存資訊告知主節點,執行器也會將自己的資訊告知驅動器。

從儲存的層面來看:我們也都知道rdd是由不同的分割槽組成的,我們對rdd進行的一系列的轉換和執行操作也都是作用在rdd的每個分割槽上的,但是rdd知識抽象層面上的儲存,具體的實現,即實際的儲存為資料塊。其實分割槽和資料塊是一一對應的,資料塊是儲存管理模組中的最小的儲存單元,我們在運算元據的時候實際就是針對資料塊上的資料進行相關的計算的。

在儲存管理模組中的資料塊大致的可以分為一下幾類:

rdd資料塊:用來標識所快取的rdd資料

shuffle資料塊:用來標識持久化的shuffle資料

廣播變數資料塊:主要用來標識儲存的廣播變數資料

任務返回結果資料塊:顧名思義主要是用來標識,在執行任務的時,對任務結果的儲存

流式資料塊:主要是用來表示接收到的流式資料塊

當然在進行操作時,資料快取的位置也是有區別的,包括記憶體快取和磁碟快取,我們都知道,記憶體快取要比磁碟的快取效能高,但有時資料量很大的情況下,一味的將資料進行記憶體快取,反而會降低整個程式的效能,原則上的快取效果應該是,在快取的時候要檢視記憶體的餘量,當記憶體不足的時候,應該將資料進行磁碟的快取,從而保證程式的效能。在資料持久化的時候,也可以對快取的地方做出設定,可以設定儲存的位置,spark中也提供了很多關於資料快取的方法。

Spark學習筆記(四) Spark記憶體管理

1.2 堆外記憶體 2.記憶體空間分配 3.儲存記憶體 storage 管理 主要需要學習的executor上面的記憶體管理 作為乙個jvm程序,executor的記憶體管理建立在jvm的記憶體管理之上,spark對jvm的堆內記憶體 on heap 空間進行更詳細的分配,以充分利用記憶體空間。同時...

Spark學習(一)之Spark初識

1.spark歷史及簡介 spark是乙個實現快速通用的集群計算平台。它是由加州大學伯克利分校amp實驗室 開發的通用記憶體平行計算框架,用來構建大型的 低延遲的資料分析應用程式。它擴充套件了廣泛使用的mapreduce計算模型。12年正式開源,距今6年歷史。spark執行架構的設計 cluster...

spark(四)廣播變數

廣播變數,初始的時候,就在drvier上有乙份副本。task在執行的時候,想要使用廣播變數中的資料,此時首先會在自己本地的executor對應的blockmanager中,嘗試獲取變數副本 如果本地沒有,那麼就從driver遠端拉取變數副本,並儲存在本地的blockmanager中 此後這個exec...