



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
RDD,全稱為Resilient Distributed Datasets(彈性分布式數(shù)據(jù)集),是一個(gè)容錯(cuò)的、并行的數(shù)據(jù)結(jié)構(gòu),可以讓用戶顯式地將數(shù)據(jù)存儲到磁盤和內(nèi)存中,并能控制數(shù)據(jù)的分區(qū)。同時(shí),RDD還提供了一組豐富的操作來操作這些數(shù)據(jù)。在這些操作中,諸如map、flatMap、filter等轉(zhuǎn)換操作實(shí)現(xiàn)了monad模式,很好地契合了Scala的集合操作。除此之外,RDD還提供了諸如join、groupBy、reduceByKey等更為方便的操作(注意,reduceByKey是action,而非transformation),以支持常見的數(shù)據(jù)運(yùn)算。通常來講,針對數(shù)據(jù)處理有幾種常見模型,包括:Iterative Algorithms,Relational Queries,MapReduce,Stream Processing。例如Hadoop MapReduce采用了MapReduces模型,Storm則采用了Stream Processing模型。RDD混合了這四種模型,使得Spark可以應(yīng)用于各種大數(shù)據(jù)處理場景。RDD作為數(shù)據(jù)結(jié)構(gòu),本質(zhì)上是一個(gè)只讀的分區(qū)記錄集合。一個(gè)RDD可以包含多個(gè)分區(qū),每個(gè)分區(qū)就是一個(gè)dataset片段。RDD可以相互依賴。如果RDD的每個(gè)分區(qū)最多只能被一個(gè)Child RDD的一個(gè)分區(qū)使用,則稱之為narrow dependency;若多個(gè)Child RDD分區(qū)都可以依賴,則稱之為wide dependency。不同的操作依據(jù)其特性,可能會產(chǎn)生不同的依賴。例如map操作會產(chǎn)生narrow dependency,而join操作則產(chǎn)生wide dependency。Spark之所以將依賴分為narrow與wide,基于兩點(diǎn)原因。首先,narrow dependencies可以支持在同一個(gè)cluster node上以管道形式執(zhí)行多條命令,例如在執(zhí)行了map后,緊接著執(zhí)行filter。相反,wide dependencies需要所有的父分區(qū)都是可用的,可能還需要調(diào)用類似MapReduce之類的操作進(jìn)行跨節(jié)點(diǎn)傳遞。其次,則是從失敗恢復(fù)的角度考慮。narrow dependencies的失敗恢復(fù)更有效,因?yàn)樗恍枰匦掠?jì)算丟失的parent partition即可,而且可以并行地在不同節(jié)點(diǎn)進(jìn)行重計(jì)算。而wide dependencies牽涉到RDD各級的多個(gè)Parent Partitions。下圖說明了narrow dependencies與wide dependencies之間的區(qū)別:本圖來自Matei Zaharia撰寫的論文An Architecture for Fast and General Data Processing on Large Clusters。圖中,一個(gè)box代表一個(gè)RDD,一個(gè)帶陰影的矩形框代表一個(gè)partition。RDD如何保障數(shù)據(jù)處理效率?RDD提供了兩方面的特性persistence和patitioning,用戶可以通過persist與patitionBy函數(shù)來控制RDD的這兩個(gè)方面。RDD的分區(qū)特性與并行計(jì)算能力(RDD定義了parallerize函數(shù)),使得Spark可以更好地利用可伸縮的硬件資源。若將分區(qū)與持久化二者結(jié)合起來,就能更加高效地處理海量數(shù)據(jù)。例如:input.map(parseArticle _).partitionBy(partitioner).cache()partitionBy函數(shù)需要接受一個(gè)Partitioner對象,如:val partitioner = new HashPartitioner(sc.defaultParallelism)RDD本質(zhì)上是一個(gè)內(nèi)存數(shù)據(jù)集,在訪問RDD時(shí),指針只會指向與操作相關(guān)的部分。例如存在一個(gè)面向列的數(shù)據(jù)結(jié)構(gòu),其中一個(gè)實(shí)現(xiàn)為Int的數(shù)組,另一個(gè)實(shí)現(xiàn)為Float的數(shù)組。如果只需要訪問Int字段,RDD的指針可以只訪問Int數(shù)組,避免了對整個(gè)數(shù)據(jù)結(jié)構(gòu)的掃描。RDD將操作分為兩類:transformation與action。無論執(zhí)行了多少次transformation操作,RDD都不會真正執(zhí)行運(yùn)算,只有當(dāng)action操作被執(zhí)行時(shí),運(yùn)算才會觸發(fā)。而在RDD的內(nèi)部實(shí)現(xiàn)機(jī)制中,底層接口則是基于迭代器的,從而使得數(shù)據(jù)訪問變得更高效,也避免了大量中間結(jié)果對內(nèi)存的消耗。在實(shí)現(xiàn)時(shí),RDD針對transformation操作,都提供了對應(yīng)的繼承自RDD的類型,例如map操作會返回MappedRDD,而flatMap則返回FlatMappedRDD。當(dāng)我們執(zhí)行map或flatMap操作時(shí),不過是將當(dāng)前RDD對象傳遞給對應(yīng)的RDD對象而已。例如:def mapU: ClassTag(f: T = U): RDDU = new MappedRDD(this, sc.clean(f)這些繼承自RDD的類都定義了compute函數(shù)。該函數(shù)會在action操作被調(diào)用時(shí)觸發(fā),在函數(shù)內(nèi)部是通過迭代器進(jìn)行對應(yīng)的轉(zhuǎn)換操作:privatesparkclass MappedRDDU: ClassTag, T: ClassTag(prev: RDDT, f: T = U) extends RDDU(prev) override def getPartitions: ArrayPartition = firstParentT.partitions override def compute(split: Partition, context: TaskContext) = firstParentT.iterator(split, context).map(f)RDD對容錯(cuò)的支持支持容錯(cuò)通常采用兩種方式:數(shù)據(jù)復(fù)制或日志記錄。對于以數(shù)據(jù)為中心的系統(tǒng)而言,這兩種方式都非常昂貴,因?yàn)樗枰缂壕W(wǎng)絡(luò)拷貝大量數(shù)據(jù),畢竟帶寬的數(shù)據(jù)遠(yuǎn)遠(yuǎn)低于內(nèi)存。RDD天生是支持容錯(cuò)的。首先,它自身是一個(gè)不變的(immutable)數(shù)據(jù)集,其次,它能夠記住構(gòu)建它的操作圖(Graph of Operation),因此當(dāng)執(zhí)行任務(wù)的Worker失敗時(shí),完全可以通過操作圖獲得之前執(zhí)行的操作,進(jìn)行重新計(jì)算。由于無需采用replication方式支持容錯(cuò),很好地降低了跨網(wǎng)絡(luò)的數(shù)據(jù)傳輸成本。不過,在某些場景下,Spark也需要利用記錄日志的方式來支持容錯(cuò)。例如,在Spark Streaming中,針對數(shù)據(jù)進(jìn)行update操作,或者調(diào)用Streaming提供的window操作時(shí),就需要恢復(fù)執(zhí)行過程的中間狀態(tài)。此時(shí),需要通過Spark提供的checkpoint機(jī)制,以支持操作能夠從checkpoint得到恢復(fù)。針對RDD的wide dependency,最有效的容錯(cuò)方式同樣還是采用checkpoint機(jī)制。不過,似乎Spark的最新版本仍然沒有引入aut
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地面裝飾工(地磚鋪貼)考試試卷及答案
- 金融服務(wù)外包項(xiàng)目雇傭勞動(dòng)合同模板
- 環(huán)??萍计髽I(yè)股權(quán)質(zhì)押授權(quán)及清潔能源合作協(xié)議
- 智能家居企業(yè)股權(quán)轉(zhuǎn)讓及智能家居標(biāo)準(zhǔn)協(xié)議范本
- 股權(quán)轉(zhuǎn)讓過程中員工安置及權(quán)益保障協(xié)議
- 股權(quán)激勵(lì)計(jì)劃與員工持股協(xié)議范本
- 金融科技企業(yè)股權(quán)并購與交割協(xié)議
- 傳媒行業(yè)股權(quán)轉(zhuǎn)讓與廣告宣傳協(xié)議
- 新能源汽車企業(yè)股東權(quán)益轉(zhuǎn)讓與市場推廣合同
- 醫(yī)療健康股權(quán)激勵(lì)與健康管理服務(wù)合作合同
- 【公開課】三角形的邊+課件+2025-2026學(xué)年人教版八年級數(shù)學(xué)上冊
- 2025年廣東省普通高中學(xué)業(yè)水平合格性考試模擬一歷史試題(含答案)
- 【公開課】+分子動(dòng)理論的初步知識(教學(xué)課件)2025-2026學(xué)年初中物理人教版(2024)九年級全一冊
- 2023aki的預(yù)防診斷和管理
- 慢性腎衰竭患者心理的護(hù)理
- 浙江省杭州市2024-2025學(xué)年高二下學(xué)期6月期末教學(xué)質(zhì)量檢測英語試題(含答案)
- 2025年河南省中考地理試題(含答案)
- 2025安全生產(chǎn)月一把手講安全公開課三十二(91P)
- 2024年安徽外國語學(xué)院輔導(dǎo)員考試真題
- DB64-266-2018 建筑工程資料管理規(guī)程
- 人教鄂教版六年級下冊科學(xué)期末專題訓(xùn)練:實(shí)驗(yàn)題、綜合題(含答案)
評論
0/150
提交評論