Spark RDD屬性特點和概念關係

2021-10-05 04:56:33 字數 3001 閱讀 7795

1.4 rdd相關概念關係

rdd(resilient distributed dataset)叫做分布式資料集,是spark中最基本的資料抽象。**中是乙個抽象類,它代表乙個不可變、可分割槽、裡面的元素可平行計算的集合。

一組分割槽(partition),即資料集的基本組成單位;

乙個計算每個分割槽的函式;

rdd之間的依賴關係;

乙個partitioner,即rdd的分片函式;

乙個列表,儲存訪問每個partition的優先位置(preferred location)。

rdd表示唯讀的分割槽的資料集,對rdd進行改動,只能通過rdd的轉換操作,由乙個rdd得到乙個新的rdd,新的rdd包含了從其他rdd衍生所必需的資訊。rdds之間存在依賴,rdd的執行是按照血緣關係延時計算的。如果血緣關係較長,可以通過持久化rdd來切斷血緣關係。

1.3.1 分割槽

rdd邏輯上是分割槽的,每個分割槽的資料是抽象存在的,計算的時候會通過乙個compute函式得到每個分割槽的資料。如果rdd是通過已有的檔案系統構建,則compute函式是讀取指定檔案系統中的資料,如果rdd是通過其他rdd轉換而來,則compute函式是執行轉換邏輯將其他rdd的資料進行轉換。

1.3.2 唯讀

如下圖所示,rdd是唯讀的,要想改變rdd中的資料,只能在現有的rdd基礎上建立新的rdd。

由乙個rdd轉換到另乙個rdd,可以通過豐富的操作運算元實現,不再像mapreduce那樣只能寫map和reduce了,如下圖所示。

rdd的操作運算元包括兩類,一類叫做transformations,它是用來將rdd進行轉化,構建rdd的血緣關係;另一類叫做actions,它是用來觸發rdd的計算,得到rdd的相關計算結果或者將rdd儲存的檔案系統中。下圖是rdd所支援的操作運算元列表。

1.3.3 依賴

rdds通過操作運算元進行轉換,轉換得到的新rdd包含了從其他rdds衍生所必需的資訊,rdds之間維護著這種血緣關係,也稱之為依賴。如下圖所示,依賴包括兩種,一種是窄依賴,rdds之間分割槽是一一對應的,另一種是寬依賴,下游rdd的每個分割槽與上游rdd(也稱之為父rdd)的每個分割槽都有關,是多對多的關係。

1.3.4 快取

如果在應用程式中多次使用同乙個rdd,可以將該rdd快取起來,該rdd只有在第一次計算的時候會根據血緣關係得到分割槽的資料,在後續其他地方用到該rdd的時候,會直接從快取處取而不用再根據血緣關係計算,這樣就加速後期的重用。如下圖所示,rdd-1經過一系列的轉換後得到rdd-n並儲存到hdfs,rdd-1在這一過程中會有個中間結果,如果將其快取到記憶體,那麼在隨後的rdd-1轉換到rdd-m這一過程中,就不會計算其之前的rdd-0了。

雖然rdd的血緣關係天然地可以實現容錯,當rdd的某個分割槽資料失敗或丟失,可以通過血緣關係重建。但是對於長時間迭代型應用來說,隨著迭代的進行,rdds之間的血緣關係會越來越長,一旦在後續迭代過程**錯,則需要通過非常長的血緣關係去重建,勢必影響效能。為此,rdd支援checkpoint將資料儲存到持久化的儲存中,這樣就可以切斷之前的血緣關係,因為checkpoint後的rdd不需要知道它的父rdds了,它可以從checkpoint處拿到資料。

輸入可能以多個檔案的形式儲存在hdfs上,每個file都包含了很多塊,稱為block。當spark讀取這些檔案作為輸入時,會根據具體資料格式對應的inputformat進行解析,一般是將若干個block合併成乙個輸入分片,稱為inputsplit,注意inputsplit不能跨越檔案。隨後將為這些輸入分片生成具體的task。inputsplit與task是一一對應的關係。隨後這些具體的task每個都會被分配到集群上的某個節點的某個executor去執行。

每個節點可以起乙個或多個executor。

每個executor由若干core組成,每個executor的每個core一次只能執行乙個task。

每個task執行的結果就是生成了目標rdd的乙個partiton。

注意: 這裡的core是虛擬的core而不是機器的物理cpu核,可以理解為就是executor的乙個工作執行緒。而 task被執行的併發度 = executor數目 * 每個executor核數。至於partition的數目:

對於資料讀入階段,例如sc.textfile,輸入檔案被劃分為多少inputsplit就會需要多少初始task。

在map階段partition數目保持不變。

在reduce階段,rdd的聚合會觸發shuffle操作,聚合後的rdd的partition數目跟具體操作有關,例如repartition操作會聚合成指定分割槽數,還有一些運算元是可配置的。

rdd在計算的時候,每個分割槽都會起乙個task,所以rdd的分割槽數目決定了總的的task數目。申請的計算節點(executor)數目和每個計算節點核數,決定了你同一時刻可以並行執行的task。

比如的rdd有100個分割槽,那麼計算的時候就會生成100個task,你的資源配置為10個計算節點,每個兩2個核,同一時刻可以並行的task數目為20,計算這個rdd就需要5個輪次。如果計算資源不變,你有101個task的話,就需要6個輪次,在最後一輪中,只有乙個task在執行,其餘核都在空轉。如果資源不變,你的rdd只有2個分割槽,那麼同一時刻只有2個task執行,其餘18個核空轉,造成資源浪費。這就是在spark調優中,增大rdd分割槽數目,增大任務並行度的做法。

Spark RDD概述特點

rdd resilient distributed dataset 叫做分布式資料集,是spark中最基本的資料抽象。中是乙個抽象類,它代表乙個不可變 可分割槽 裡面的元素可平行計算的集合。一組分割槽 partition 即資料集的基本組成單位 乙個計算每個分割槽的函式 rdd之間的依賴關係 乙個p...

軟體的特點和概念

1.什麼是計算機軟體?計算機軟體是指電腦程式以及解釋和指導使用程式文件的總和。電腦程式包括源程式和目標程式。同一程式的原始檔和目標檔案應當是被視為同一作品的。源程式是指用高階語言或者組合語言編寫的程式。目標程式是指源程式通過編譯或解釋加工後能直接被計算機執行的程式。2.計算機軟體的特點?計算機軟體既...

網路工程的概念和特點

1 寫出網路工程的概念 網路工程就是講工程化的技術和方法應用到計算機網路系統中。2 網路工程與系統整合的區別與聯絡是什麼?網路工程的層次結構可以分為 1.網路工程的工具 2.網路工程的方法 3.網路專案管理和控制 4.網路專案管理和控制 5.質量管理 而網路系統整合只是整個 系統整合 的一部分,主要...