rdd(resilient distributed dataset)叫做分布式資料集,是spark中最基本的資料抽象。**中是乙個抽象類,它代表乙個不可變、可分割槽、裡面的元素可平行計算的集合。
1)一組分割槽(partition),即資料集的基本組成單位;
2)乙個計算每個分割槽的函式;
3)rdd之間的依賴關係;
4)乙個partitioner,即rdd的分片函式;
5)乙個列表,儲存訪問每個partition的優先位置(preferred location)。
rdd表示唯讀的分割槽的資料集,對rdd進行改動,只能通過rdd的轉換操作,由乙個rdd得到乙個新的rdd,新的rdd包含了從其他rdd衍生所必需的資訊。rdds之間存在依賴,rdd的執行是按照血緣關係延時計算的。如果血緣關係較長,可以通過持久化rdd來切斷血緣關係。
rdd邏輯上是分割槽的,每個分割槽的資料是抽象存在的,計算的時候會通過乙個compute函式得到每個分割槽的資料。如果rdd是通過已有的檔案系統構建,則compute函式是讀取指定檔案系統中的資料,如果rdd是通過其他rdd轉換而來,則compute函式是執行轉換邏輯將其他rdd的資料進行轉換。
如下圖所示,rdd是唯讀的,要想改變rdd中的資料,只能在現有的rdd基礎上建立新的rdd。
由乙個rdd轉換到另乙個rdd,可以通過豐富的操作運算元實現,不再像mapreduce那樣只能寫map和reduce了,如下圖所示。
rdd的操作運算元包括兩類,一類叫做transformations,它是用來將rdd進行轉化,構建rdd的血緣關係;另一類叫做actions,它是用來觸發rdd的計算,得到rdd的相關計算結果或者將rdd儲存的檔案系統中。下圖是rdd所支援的操作運算元列表。
rdds通過操作運算元進行轉換,轉換得到的新rdd包含了從其他rdds衍生所必需的資訊,rdds之間維護著這種血緣關係,也稱之為依賴。如下圖所示,依賴包括兩種,一種是窄依賴,rdds之間分割槽是一一對應的,另一種是寬依賴,下游rdd的每個分割槽與上游rdd(也稱之為父rdd)的每個分割槽都有關,是多對多的關係。
如果在應用程式中多次使用同乙個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處拿到資料。
第1章 概述
tcp ip協議族分為四層 鏈路層 網路層 運輸層和應用層,每一層各有不同的責任。在tcp ip中,網路層和運輸層之間的區別是最為關鍵的 網路層 i p 提供點到點的服務,而運輸層 tcp和udp 提供端到端的服務。乙個網際網路是網路的網路。構造網際網路的共同基石是路由器,它們在 i p層把網路連在...
第1章 概述
j a ee j2ee j a企業版或j a企業平台,可以構建企業級的服務應用。j a ee平台包含了j a se平台,並增加了附加類庫,以便支援目錄管理 交易管理和企業級訊息處理等功能。j a me j2me j a微型版或j a小型平台。j a me是一種很小的j a執行環境,用於嵌入式的消費產...
第1章 語言概述
1.1 c語言的發展簡史和特點 1.2 語言程式的結構與書寫規則 1.3 c語言的語句和關鍵字 1.4 turbo c v2.0的基本操作 1.1 c語言的發展簡史和特點 1 語言的誕生與發展 1 在c語言誕生以前,系統軟體主要是用組合語言編寫的。由於組合語言程式依賴於計算機硬體,其可讀性和可移植性...