RDD淵源
彈性分布式數(shù)據(jù)集(RDD)队寇,它是MapReduce模型一種簡單的擴(kuò)展和延伸霉猛,RDD為了實(shí)現(xiàn)迭代出嘹、交互性和流查詢等功能舰蟆,需要保證RDD具備在并行計(jì)算階段之間能夠高效地數(shù)據(jù)共享的功能特性段只。RDD運(yùn)用高效的數(shù)據(jù)共享概念和類似于MapReduce的操作方式腮猖,使得所有的計(jì)算工作可以有效地執(zhí)行,并可以在當(dāng)前特定的系統(tǒng)中獲得關(guān)鍵性的優(yōu)化赞枕。
RDD是一種有容錯機(jī)制的特殊集合澈缺,可以分布在集群的節(jié)點(diǎn)上,以函數(shù)式編操作集合的方式炕婶,進(jìn)行各種并行操作姐赡。可以將RDD理解為一個具有容錯機(jī)制的特殊集合柠掂,它提供了一種只讀项滑、只能由已存在的RDD變換而來的共享內(nèi)存,然后將所有數(shù)據(jù)都加載到內(nèi)存中涯贞,方便進(jìn)行多次重用枪狂。
a. 它是分布式的,可以分布在多臺機(jī)器上宋渔,進(jìn)行計(jì)算州疾。
b. 它是彈性的,計(jì)算過程中內(nèi)存不夠時它會和磁盤進(jìn)行數(shù)據(jù)交換皇拣。
c. 這些限制可以極大的降低自動容錯開銷
d. 實(shí)質(zhì)是一種更為通用的迭代并行計(jì)算框架严蓖,用戶可以顯式的控制計(jì)算的中間結(jié)果,然后將其自由運(yùn)用于之后的計(jì)算氧急。
RDD是一個可以避免復(fù)制的容錯分布式存儲概念颗胡。取而代之,每一個RDD都會記住由構(gòu)建它的那些操作所構(gòu)成的一個圖吩坝,類似于批處理計(jì)算模型杭措,可以有效地重新計(jì)算因故障丟失的數(shù)據(jù)。由于創(chuàng)建RDD的操作是相對粗粒度的钾恢,即單一的操作應(yīng)用于許多數(shù)據(jù)元素手素,該技巧比通過網(wǎng)絡(luò)復(fù)制數(shù)據(jù)更高效鸳址。RDD很好地運(yùn)用于當(dāng)前廣泛的數(shù)據(jù)并行算法和處理模型中,所有的這些對多個任務(wù)使用同一種操作泉懦。
RDD機(jī)制實(shí)現(xiàn)的模型
RDD 機(jī)制實(shí)現(xiàn)了多類模型稿黍,包括多個現(xiàn)有的集群編程模型和之前模型所沒有支持的新應(yīng)用。在這些模型中崩哩,RDD機(jī)制不僅在性能方面能夠和之前系統(tǒng)相匹配巡球,在其他方面,他們也能加入現(xiàn)有的系統(tǒng)所缺少的新特性邓嘹,比如容錯性酣栈,straggler容忍和彈性。我們討論以下四類模型汹押。
迭代式算法
一種目前已經(jīng)開發(fā)的針對特定系統(tǒng)最常見的的工作模式是迭代算法矿筝,比如應(yīng)用于圖處理,數(shù)值優(yōu)化棚贾,以及機(jī)器學(xué)習(xí)中的算法窖维。RDD可以支持廣泛類型的各種模型,包括Pregel妙痹,像HaLoop和Twister這類的迭代式MapReduce模型铸史,以及確定版本的GraphLab和PowerGraph模型。
關(guān)系查詢
在MapReduce集群中的首要需求中的一類是執(zhí)行SQL查詢怯伊,長期運(yùn)行或多個小時的批量計(jì)算任務(wù)和即時查詢琳轿。這促進(jìn)了很多在商業(yè)集群中應(yīng)用的并行數(shù)據(jù)庫系統(tǒng)的發(fā)展。
MapReduce相比并行數(shù)據(jù)庫在交互式查詢有非常大的缺陷耿芹,例如MapReduce的容錯機(jī)制模型利赋,而我們發(fā)現(xiàn)通過在RDD操作中實(shí)現(xiàn)很多常用的數(shù)據(jù)庫引擎的特性(比如,列處理)猩系,這樣能夠達(dá)到相當(dāng)可觀的性能媚送。
MapReduce
RDD通過提供MapReduce的一個超集,能夠高效地執(zhí)行MapReduce程序寇甸,同樣也可以指向比如DryadLINQ這樣常見的機(jī)遇DAG數(shù)據(jù)流的應(yīng)用塘偎。
流式數(shù)據(jù)處理
Spark與定制化系統(tǒng)最大的區(qū)別是Spark也使用RDD實(shí)現(xiàn)了流式處理。流式數(shù)據(jù)處理已經(jīng)在數(shù)據(jù)庫和系統(tǒng)領(lǐng)域進(jìn)行了很長時間研究拿霉,但是實(shí)現(xiàn)大規(guī)模流式數(shù)據(jù)處理仍然是一項(xiàng)挑戰(zhàn)吟秩。當(dāng)前的模型并沒有處理在大規(guī)模集群中頻繁出現(xiàn)的straggler的問題,同時對故障恢復(fù)的方式也非常有限绽淘,需要大量的復(fù)制或浪費(fèi)很長的恢復(fù)時間涵防。特別是,當(dāng)前的系統(tǒng)是基于一種持續(xù)操作的模型沪铭,這就需要長時間的有狀態(tài)的操作處理每一個到達(dá)的記錄壮池。為了恢復(fù)一個丟失的節(jié)點(diǎn)偏瓤,當(dāng)前的系統(tǒng)需要保存每一個操作符的兩個副本,或通過一系列耗費(fèi)大量開銷的串行處理來對上游的數(shù)據(jù)進(jìn)行重放椰憋。
Spark提出了一個新的模型厅克,離散數(shù)據(jù)流(D-Streams),來解決這樣的問題。對使用長期狀態(tài)處理的過程進(jìn)行替換橙依,D-Streams 把流式計(jì)算的執(zhí)行當(dāng)做一系列短而確定性的批量計(jì)算的序列证舟,將狀態(tài)保存在RDD里。D-Stream模型通過根據(jù)相關(guān)RDD的依賴關(guān)系圖進(jìn)行并行化恢復(fù)窗骑,就能達(dá)到快速的故障恢復(fù)女责,這樣不需要通過復(fù)制。另外创译,它通過推測(Speculative)來支持對straggler遷移執(zhí)行抵知,例如,對那些慢任務(wù)運(yùn)行經(jīng)過推測的備份副本昔榴。盡管D-Stream將計(jì)算轉(zhuǎn)換為許多不相關(guān)聯(lián)的jobs來運(yùn)行從而增加了部分延遲,然而我們證明了D-Stream能夠被達(dá)到次秒級延時的實(shí)現(xiàn)碘橘,這樣能夠達(dá)到以前系統(tǒng)單個節(jié)點(diǎn)的性能互订,并能線性擴(kuò)展到100個節(jié)點(diǎn)。D-Stream 的強(qiáng)恢復(fù)特性讓他們成為了第一個處理大規(guī)模集群特性的流式處理模型痘拆,并且他們基于RDD的實(shí)現(xiàn)使得應(yīng)用能夠有效的整合批處理和交互式查詢仰禽。
小結(jié)
Spark將這些模型整合到一起,RDD還能支持一些現(xiàn)有系統(tǒng)不能表示的新的應(yīng)用纺蛆。例如吐葵,許多數(shù)據(jù)流應(yīng)用程序還需要加入歷史數(shù)據(jù)的信息;通過使用 RDD 可以在同一程序中同時使用批處理和流式處理桥氏,這樣來實(shí)現(xiàn)在所有模型中數(shù)據(jù)共享和容錯恢復(fù)温峭。同樣的,流式應(yīng)用的操作者常常需要在數(shù)據(jù)流的狀態(tài)上執(zhí)行即時查詢字支;在D-Stream中的RDD能夠如靜態(tài)數(shù)據(jù)形式進(jìn)行查詢凤藏。我們使用一些在線機(jī)器學(xué)習(xí)和視頻分析的實(shí)際應(yīng)用來說明了這些用例。更一般的說堕伪,每一個批處理應(yīng)用常常需要整合多個處理類型:比如揖庄,一個應(yīng)用可能需要使用SQL提取一個數(shù)據(jù)集,在數(shù)據(jù)集上訓(xùn)練一個機(jī)器學(xué)習(xí)模型欠雌,之后對這個模型進(jìn)行查詢蹄梢。由于計(jì)算的大部分時間花在系統(tǒng)之間共享數(shù)據(jù)的分布式文件系統(tǒng)的I/O開銷上,因此使用當(dāng)前多個系統(tǒng)組合而成的工作流的效率非常的低下富俄。使用一個基于RDD機(jī)制的系統(tǒng)禁炒,這些計(jì)算可以在同一個引擎中緊接著執(zhí)行而咆,而不需要額外的I/O。
轉(zhuǎn)載請注明作者Jason Ding及其出處
GitCafe博客主頁(http://jasonding1354.gitcafe.io/)
Github博客主頁(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡書主頁(http://www.reibang.com/users/2bd9b48f6ea8/latest_articles)
Google搜索jasonding1354進(jìn)入我的博客主頁