您好,登錄后才能下訂單哦!
今天小編給大家分享一下RDD的知識點有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Spark 編程模型是彈性分布式數據集(Resilient Distributed Dataset. RDD),它是 MapReduce 模型的擴展和延伸,但它解決了 MapReduce的缺陷:在并行計算階段高效地進行數據共享。運用高效的數據共享概念和類似于MapReduce的操作方式,使得并行計算能夠高效地進行,并可以在特定的系統中得到關鍵的優化。
相比以前集群容錯處理模型,如MapReduce,他們將計算轉換為一個有向無環圖 (DAG)的任務集合。這使在這些模型中能夠有效地恢復DAG中故障和慢節點執行的任務,但是這些模型中除了文件系統外沒有提供其他的存儲方式,這就導致了在網絡上進行頻繁的數據復制而造成I/O壓力。
由于RDD提供一種基于粗粒度變換(如map、filter和join等)的接口, 該接口會將相同的操作應用到多個數據集上,這就使得它們可以記錄創建數據集的“血統” (Lineage),而不需要存儲真正的數據,從而達到高效的容錯性。
當某個RDD分區丟失的時候, RDD記錄有足夠的信息來重新計算,而且只需要計算該分區,這樣丟失的數據可以很快地恢復, 不需要昂貴的復制代價。
基于RDD機制實現了多類模型計算,包括多個現有的集群編程模式。在這些模型中,RDD 不僅在性能方面達到了之前的系統水平,也帶來了現有系統所缺少的新特性,如容錯性、慢節 點執行和彈性資源分配等。這些模型包括以下幾方面的內容。
(1) 迭代計算:目前最常見的工作方式,比如應用于圖處理、數值優化以及機器學習中的 算法。RDD可以支持各類型模型,包括Pregel、MapReduce、GraphLab和PowerGraph模型。
(2) 交互式SQL査詢:在MapReduce集群中大部分需求是執行SQL查詢,而MapReduce 相對并行數據庫在交互式查詢有很大的不足。而Spark的RDD不僅擁有很多常見數據庫引擎的 特性,達到可觀的性能,而且在Spark SQL中提供完善的容錯機制,能夠在短查詢和長查詢中 很好地處理故障和慢節點。
(3) MapReduceRDD:通過提供MapReduce的超集,能夠高效地執行MapReduce程序, 同樣也可以如DryadLINQ這樣常見的DAG數據流的應用。
(4) 流式數據處理:流式數據處理已經在數據庫和系統領域進行了很長時間的研究,但是大規模流式數據處理仍是一項挑戰。當前的模型沒有解決在大規模集群中頻繁岀現的慢節點的 問題,同時對故障解決辦法有限,需要大量的復制或浪費很長的恢復時間。為了恢復一個丟失的節點,當前的系統需要保存每一個操作的兩個副本,或通過一系列耗費大量開銷的串行處理 對故障點之前的數據進行重新處理。
Spark提出了離散數據流(D-Streams)來解決這樣的問題,D-Streams把流式計算的執行當作一系列短而確定的批量計算的序列,并將狀態保存在RDD中。D-Streams根據相關RDD的 依賴關系圖進行并行化恢復,可以達到快速故障恢復,避免了數據復制。
另外通過推測執行來支持對Straggler遷移執行,例如,對慢任務運行經過推測的備份副本。盡管D-Streams將計算 轉換為許多不相關聯的作業來運行而增加延遲,但這種延遲在D-Streams集群處理中只耗費次 秒級時間。
RDD還能夠支持一些現有系統不能表示的新應用。例如,許多數據流應用程序還需要加入 歷史數據的信息;通過使用RDD可以在同一程序中同時使用批處理和流式處理,這樣來實現 所有模型中數據共享和容錯恢復;同樣地,流式應用的操作者常常需要在數據流的狀態上執行及時查詢。一般來說,每一個批處理應用常常需要整合多個處理類型,比如,一個應用可能需 要使用SQL提取數據,在數據集上訓練一個機器學習模型,然后對這個模型進行查詢。
由于計算的大部分時間花在系統之間共享數據的分布式文件系統I/O的開銷上,因此使用當前多個系 統組合而成的工作流效率非常低下。而使用一個基于RDD機制的系統,這些計算可以在同一 個引擎中緊接著執行,不需要額外的I/O操作,處理效率大大提高。
Spark編程中開發者需要編寫一個驅動程序(Driver Program)來連接至工作進程(Worker)。驅動程序定義一個或多個RDD以及相關行動操作,驅動程序同時記錄RDD的 繼承關系,即“血統”。而工作進程(Worker)是一直運行的進程,它將經過一系列操作后的 RDD分區數據保存在內存中。
Spark中的操作大致可以分為四類操作,分別為創建操作、轉換操作、控制操作和行為操作
創建操作(Creation Operation):用于RDD創建工作。RDD創建只有兩種方法,一種 是來自于內存集合和外部存儲系統,另一種是通過轉換操作生成的RDD。
轉換操作(Transformation Operation):將RDD通過一定的操作變換成新的RDD,比 如HadoopRDD可以使用map操作變換為MappedRDD, RDD的轉換操作是惰性操作, 它只是定義了一個新的RDDs,并沒有立即執行。
控制操作(Control Operation):進行RDD持久化,可以讓RDD按不同的存儲策略保 存在磁盤或者內存中,比如cache接口默認將RDD緩存在內存中。
行動操作(Action Operation):能夠觸發Spark運行的操作,例如,對RDD進行collect 就是行動操作。Spark中行動操作分為兩類,一類的操作結果變成Scala集合或者變量, 另一類將RDD保存到外部文件系統或者數據庫中。
以上就是“RDD的知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。