Spark——RDD(Resilient Distributed Datasets彈性分布式數(shù)據(jù)集)的設(shè)計與運行原理_第1頁
Spark——RDD(Resilient Distributed Datasets彈性分布式數(shù)據(jù)集)的設(shè)計與運行原理_第2頁
Spark——RDD(Resilient Distributed Datasets彈性分布式數(shù)據(jù)集)的設(shè)計與運行原理_第3頁
Spark——RDD(Resilient Distributed Datasets彈性分布式數(shù)據(jù)集)的設(shè)計與運行原理_第4頁
Spark——RDD(Resilient Distributed Datasets彈性分布式數(shù)據(jù)集)的設(shè)計與運行原理_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、SparkRDD(Resilient Distributed Datasets彈性分布式數(shù)據(jù)集)的設(shè)計與運行原理2 本文來自:大數(shù)據(jù)技術(shù)原理與應(yīng)用(第2版)概念、存儲、處理、分析與應(yīng)用 作 者:林子雨 出版社:人民郵電出版社 版權(quán)說明 若作者對本資料使用持有異議,請及時聯(lián)系本網(wǎng)站,我們將在第一時間妥善處理。23RDD運行原理1.設(shè)計背景 許多迭代式算法(比如機(jī)器學(xué)習(xí)、圖算法等)和交互式數(shù)據(jù)挖掘工具,共同之處是,不同計算階段之間會重用中間結(jié)果 目前的MapReduce框架都是把中間結(jié)果寫入到HDFS中,帶來了大量的數(shù)據(jù)復(fù)制、磁盤IO和序列化開銷 RDD就是為了滿足這種需求而出現(xiàn)的,它提供了一個抽

2、象的數(shù)據(jù)架構(gòu),我們不必?fù)?dān)心底層數(shù)據(jù)的分布式特性,只需將具體的應(yīng)用邏輯表達(dá)為一系列轉(zhuǎn)換處理,不同RDD之間的轉(zhuǎn)換操作形成依賴關(guān)系,可以實現(xiàn)管道化,避免中間數(shù)據(jù)存儲4RDD運行原理2.RDD概念 一個RDD就是一個分布式對象集合,本質(zhì)上是一個只讀的分區(qū)記錄集合,每個RDD可分成多個分區(qū),每個分區(qū)就是一個數(shù)據(jù)集片段,并且一個RDD的不同分區(qū)可以被保存到集群中不同的節(jié)點上,從而可以在集群中的不同節(jié)點上進(jìn)行并行計算 RDD提供了一種高度受限的共享內(nèi)存模型,即RDD是只讀的記錄分區(qū)的集合,不能直接修改,只能基于穩(wěn)定的物理存儲中的數(shù)據(jù)集創(chuàng)建RDD,或者通過在其他RDD上執(zhí)行確定的轉(zhuǎn)換操作(如map、join

3、和group by)而創(chuàng)建得到新的RDD5RDD運行原理2.RDD概念 RDD提供了一組豐富的操作以支持常見的數(shù)據(jù)運算,分為“動作”(Action)和“轉(zhuǎn)換”(Transformation)兩種類型 RDD提供的轉(zhuǎn)換接口都非常簡單,都是類似map、filter、groupBy、join等粗粒度的數(shù)據(jù)轉(zhuǎn)換操作,而不是針對某個數(shù)據(jù)項的細(xì)粒度修改(不適合網(wǎng)頁爬蟲) 表面上RDD的功能很受限、不夠強(qiáng)大,實際上RDD已經(jīng)被實踐證明可以高效地表達(dá)許多框架的編程模型(比如MapReduce、SQL、Pregel) Spark用Scala語言實現(xiàn)了RDD的API,程序員可以通過調(diào)用API實現(xiàn)對RDD的各種操作

4、6RDD運行原理 RDD典型的執(zhí)行過程如下: RDD讀入外部數(shù)據(jù)源進(jìn)行創(chuàng)建 RDD經(jīng)過一系列的轉(zhuǎn)換(Transformation)操作,每一次都會產(chǎn)生不同的RDD,供給下一個轉(zhuǎn)換操作使用 最后一個RDD經(jīng)過“動作”操作進(jìn)行轉(zhuǎn)換,并輸出到外部數(shù)據(jù)源 RDD執(zhí)行過程的一個實例動作轉(zhuǎn)換轉(zhuǎn)換轉(zhuǎn)換轉(zhuǎn)換轉(zhuǎn)換創(chuàng)建創(chuàng)建這一系列處理稱為一個Lineage(血緣關(guān)系),即DAG拓?fù)渑判虻慕Y(jié)果優(yōu)點:惰性調(diào)用、管道化、避免同步等待、不需要保存中間結(jié)果、每次操作變得簡單7RDD運行原理3.RDD特性 Spark采用RDD以后能夠?qū)崿F(xiàn)高效計算的原因主要在于: (1)高效的容錯性 現(xiàn)有容錯機(jī)制:數(shù)據(jù)復(fù)制或者記錄日志 RDD

5、:血緣關(guān)系、重新計算丟失分區(qū)、無需回滾系統(tǒng)、重算過程在不同節(jié)點之間并行、只記錄粗粒度的操作 (2)中間結(jié)果持久化到內(nèi)存,數(shù)據(jù)在內(nèi)存中的多個RDD操作之間進(jìn)行傳遞,避免了不必要的讀寫磁盤開銷 (3)存放的數(shù)據(jù)可以是Java對象,避免了不必要的對象序列化和反序列化8RDD運行原理4. RDD之間的依賴關(guān)系窄依賴表現(xiàn)為一個父RDD的分區(qū)對應(yīng)于一個子RDD的分區(qū)或多個父RDD的分區(qū)對應(yīng)于一個子RDD的分區(qū)寬依賴則表現(xiàn)為存在一個父RDD的一個分區(qū)對應(yīng)一個子RDD的多個分區(qū)窄依賴與寬依賴的區(qū)別9RDD運行原理5.Stage的劃分 Spark通過分析各個RDD的依賴關(guān)系生成了DAG,再通過分析各個RDD中的

6、分區(qū)之間的依賴關(guān)系來決定如何劃分Stage,具體劃分方法是: 在DAG中進(jìn)行反向解析,遇到寬依賴就斷開 遇到窄依賴就把當(dāng)前的RDD加入到Stage中 將窄依賴盡量劃分在同一個Stage中,可以實現(xiàn)流水線計算10RDD運行原理根據(jù)RDD分區(qū)的依賴關(guān)系劃分Stage流水線操作實例分區(qū)7通過map操作生成的分區(qū)9,可以不用等待分區(qū)8到分區(qū)10這個map操作的計算結(jié)束,而是繼續(xù)進(jìn)行union操作,得到分區(qū)13,這樣流水線執(zhí)行大大提高了計算的效率被分成三個Stage,在Stage2中,從map到union都是窄依賴,這兩步操作可以形成一個流水線操作5.Stage的劃分的劃分11RDD運行原理5.Stag

7、e的劃分 Stage的類型包括兩種:ShuffleMapStage和ResultStage,具體如下: (1)ShuffleMapStage:不是最終的Stage,在它之后還有其他Stage,所以,它的輸出一定需要經(jīng)過Shuffle過程,并作為后續(xù)Stage的輸入;這種Stage是以Shuffle為輸出邊界,其輸入邊界可以是從外部獲取數(shù)據(jù),也可以是另一個ShuffleMapStage的輸出,其輸出可以是另一個Stage的開始;在一個Job里可能有該類型的Stage,也可能沒有該類型Stage; (2)ResultStage:最終的Stage,沒有輸出,而是直接產(chǎn)生結(jié)果或存儲。這種Stage是直接輸出結(jié)果,其輸入邊界可以是從外部獲取數(shù)據(jù),也可以是另一個ShuffleMapStage的輸出。在一個Job里必定有該類型Stage。 因此,一個Job含有一個或多個Stage,其中至少含有一個ResultStage。12RDD運行原理6.RDD運行過程通過上述對RDD概念、依賴關(guān)系和Stage劃分的介紹,結(jié)合之前介紹的Spark運行基本流程,再總結(jié)一下RDD在Spark架構(gòu)中的運行過程:RDD在Spark中的運行過程13RDD運行原理6.RDD運行過程(1)創(chuàng)建RDD對象;(2)SparkContext負(fù)責(zé)計算RDD之間的依賴關(guān)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論