RDD淵源
彈性分布式資料集(RDD)。它是MapReduce模型一種簡單的擴充和延伸。RDD為了實作疊代、互動性和流查詢等功能,須要保證RDD具備在并行計算階段之間能夠高效地資料共享的功能特性。RDD運用高效的資料共享概念和相似于MapReduce的操作方式,使得全部的計算工作能夠有效地運作,并能夠在目前特定的系統中獲得關鍵性的優化。
RDD是一種有容錯機制的特殊集合,能夠分布在叢集的節點上,以函數式編操作集合的方式。進行各種并行操作。能夠将RDD了解為一個具有容錯機制的特殊集合,它提供了一種僅僅讀、僅僅能由已存在的RDD變換而來的共享記憶體,然後将全部資料都載入到記憶體中,友善進行多次重用。
a. 它是分布式的,能夠分布在多台機器上,進行計算。
b. 它是彈性的。計算過程中記憶體不夠時它會和磁盤進行資料交換。
c. 這些限制能夠極大的減少自己主動容錯開銷
d. 實質是一種更為通用的疊代并行計算架構,使用者能夠顯式的控制計算的中間結果,然後将其自由運用于之後的計算。
RDD是一個能夠避免複制的容錯分布式存儲概念。取而代之。每個RDD都會記住由建構它的那些操作所構成的一個圖,相似于批處理計算模型。能夠有效地又一次計算因故障丢失的資料。
因為建立RDD的操作是相對粗粒度的,即單一的操作應用于很多資料元素,該技巧比通過網絡複制資料更高效。RDD非常好地運用于目前廣泛的資料并行算法和處理模型中,全部的這些對多個任務使用同一種操作。
RDD機制實作的模型
RDD 機制實作了多類模型。包含多個現有的叢集程式設計模型和之前模型所沒有支援的新應用。
在這些模型中。RDD機制不僅在性能方面能夠和之前系統相比對,在其它方面,他們也能增加現有的系統所缺少的新特性,比方容錯性。straggler容忍和彈性。我們讨論下面四類模型。
疊代式算法
一種眼下已經開發的針對特定系統最常見的的工作模式是疊代算法,比方應用于圖處理。數值優化,以及機器學習中的算法。
RDD能夠支援廣泛類型的各種模型,包含Pregel。像HaLoop和Twister這類的疊代式MapReduce模型。以及确定版本号的GraphLab和PowerGraph模型。
關系查詢
在MapReduce叢集中的首要需求中的一類是運作SQL查詢,長期運作或多個小時的批量計算任務和即時查詢。
這促進了非常多在商業叢集中應用的并行資料庫系統的發展。
MapReduce相比并行資料庫在互動式查詢有非常大的缺陷。比如MapReduce的容錯機制模型,而我們發現通過在RDD操作中實作非常多經常使用的資料庫引擎的特性(比方,列處理),這樣能夠達到相當可觀的性能。
MapReduce
RDD通過提供MapReduce的一個超集。能夠高效地運作MapReduce程式,相同也能夠指向比方DryadLINQ這樣常見的機遇DAG資料流的應用。
流式資料處理
Spark與定制化系統最大的差别是Spark也使用RDD實作了流式處理。
流式資料處理已經在資料庫和系統領域進行了非常長時間研究。可是實作大規模流式資料處理仍然是一項挑戰。
目前的模型并沒有處理在大規模叢集中頻繁出現的straggler的問題,同一時候對故障恢複的方式也非常有限。須要大量的複制或浪費非常長的恢複時間。
特别是。目前的系統是基于一種持續操作的模型,這就須要長時間的有狀态的操作處理每個到達的記錄。為了恢複一個丢失的節點,目前的系統須要儲存每個操作符的兩個副本,或通過一系列耗費大量開銷的串行處理來對上遊的資料進行重放。
Spark提出了一個新的模型。離散資料流(D-Streams),來解決這種問題。對使用長期狀态處理的過程進行替換。D-Streams 把流式計算的運作當做一系列短而确定性的批量計算的序列,将狀态儲存在RDD裡。
D-Stream模型通過依據相關RDD的依賴關系圖進行并行化恢複,就能達到高速的故障恢複,這樣不須要通過複制。另外。它通過猜測(Speculative)來支援對straggler遷移運作,比如,對那些慢任務運作經過猜測的備份副本。雖然D-Stream将計算轉換為很多不相關聯的jobs來運作進而增加了部分延遲,然而我們證明了D-Stream能夠被達到次秒級延時的實作。這樣能夠達到曾經系統單個節點的性能,并能線性擴充到100個節點。
D-Stream 的強恢複特性讓他們成為了第一個處理大規模叢集特性的流式處理模型。而且他們基于RDD的實作使得應用能夠有效的整合批處理和互動式查詢。
小結
Spark将這些模型整合到一起。RDD還能支援一些現有系統不能表示的新的應用。比如,很多資料流應用程式還須要增加曆史資料的資訊;通過使用 RDD 能夠在同一程式中同一時候使用批處理和流式處理。這樣來實如今全部模型中資料共享和容錯恢複。相同的。流式應用的操作者經常須要在資料流的狀态上運作即時查詢;在D-Stream中的RDD能夠如靜态資料形式進行查詢。