中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RDD運行機制是什么

發布時間:2022-01-27 14:57:13 來源:億速云 閱讀:197 作者:iii 欄目:開發技術

這篇文章主要介紹“RDD運行機制是什么”,在日常操作中,相信很多人在RDD運行機制是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”RDD運行機制是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

RDD就是 Resillient Distributed Dataset,即彈性分布式數據集。它是Spark提供的核心抽象。RDD在抽象上來講是一種抽象的分布式的數據集。它是被分區的,每個分區分布在集群中的不同的節點上。從而可以讓數據進行并行的計算它主要特點就是彈性和容錯性。

1. RDD 的設計與運行原理

Spark 的核心是建立在統一的抽象 RDD 之上,基于 RDD 的轉換和行動操作使得 Spark 的各個組件可以無縫進行集成,從而在同一個應用程序中完成大數據計算任務。

在實際應用中,存在許多迭代式算法和交互式數據挖掘工具,這些應用場景的共同之處在于不同計算階段之間會重用中間結果,即一個階段的輸出結果會作為下一個階段的輸入。而 Hadoop 中的 MapReduce 框架都是把中間結果寫入到 HDFS 中,帶來了大量的數據復制、磁盤 IO 和序列化開銷,并且通常只支持一些特定的計算模式。而 RDD 提供了一個抽象的數據架構,從而讓開發者不必擔心底層數據的分布式特性,只需將具體的應用邏輯表達為一系列轉換處理,不同 RDD 之間的轉換操作形成依賴關系,可以實現管道化,從而避免了中間結果的存儲,大大降低了數據復制、磁盤 IO 和序列化開銷。

1.1. RDD 概念

一個 RDD 就是一個分布式對象集合,提供了一種高度受限的共享內存模型,其本質上是一個只讀的分區記錄集合,不能直接修改。每個 RDD 可以分成多個分區,每個分區就是一個數據集片段,并且一個 RDD 的不同分區可以保存到集群中不同的節點上,從而可以在集群中的不同節點上進行并行計算。

RDD 提供了一組豐富的操作以支持常見的數據運算,分為“行動”(Action)和“轉換”(Transformation)兩種類型,前者用于執行計算并指定輸出的形式,后者指定 RDD 之間的相互依賴關系。RDD 提供的轉換接口都非常簡單,都是類似 map 、filter 、groupBy 、join 等粗粒度的數據轉換操作,而不是針對某個數據項的細粒度修改。因此,RDD 比較適合對于數據集中元素執行相同操作的批處理式應用,而不適合用于需要異步、細粒度狀態的應用,比如 Web 應用系統、增量式的網頁爬蟲等。

RDD 的典型的執行過程如下:

讀入外部的數據源(或者內存中的集合)進行 RDD 創建;RDD 經過一系列的 “轉換” 操作,每一次都會產生不同的 RDD,供給下一個轉換使用;最后一個 RDD 經過 “行動” 操作進行處理,并輸出指定的數據類型和值。RDD 采用了惰性調用,即在 RDD 的執行過程中,所有的轉換操作都不會執行真正的操作,只會記錄依賴關系,而只有遇到了行動操作,才會觸發真正的計算,并根據之前的依賴關系得到最終的結果。

RDD運行機制是什么

下面以一個實例來描述 RDD 的實際執行過程,如下圖所示,開始從輸入中創建了兩個 RDD,分別是 A 和 C,然后經過一系列的轉換操作,最終生成了一個 F,這也是一個 RDD。注意,這些轉換操作的執行過程中并沒有執行真正的計算,基于創建的過程也沒有執行真正的計算,而只是記錄的數據流向軌跡。當 F 執行了行為操作并生成輸出數據時,Spark 才會根據 RDD 的依賴關系生成有向無環圖(DAG),并從起點開始執行真正的計算。正是 RDD 的這種惰性調用機制,使得轉換操作得到的中間結果不需要保存,而是直接管道式的流入到下一個操作進行處理。

RDD運行機制是什么
1.2. RDD 特性

總體而言,Spark 采用 RDD 以后能夠實現高效計算的主要原因如下:

高效的容錯性。在 RDD 的設計中,只能通過從父 RDD 轉換到子 RDD 的方式來修改數據,這也就是說我們可以直接利用 RDD 之間的依賴關系來重新計算得到丟失的分區,而不需要通過數據冗余的方式。而且也不需要記錄具體的數據和各種細粒度操作的日志,這大大降低了數據密集型應用中的容錯開銷。

中間結果持久化到內存。數據在內存中的多個 RDD 操作之間進行傳遞,不需要在磁盤上進行存儲和讀取,避免了不必要的讀寫磁盤開銷;

存放的數據可以是 Java 對象,避免了不必要的對象序列化和反序列化開銷。

1.3. RDD 之間的依賴關系

RDD 中的不同的操作會使得不同 RDD 中的分區會產生不同的依賴關系,主要分為窄依賴(Narrow Dependency)與寬依賴(Wide Dependency)。其中,窄依賴表示的是父 RDD 和子 RDD 之間的一對一關系或者多對一關系,主要包括的操作有 map、filter、union 等;而寬依賴則表示父 RDD 與子 RDD 之間的一對多關系,即一個父 RDD 轉換成多個子 RDD,主要包括的操作有 groupByKey、sortByKey 等。

RDD運行機制是什么

對于窄依賴的 RDD,可以以流水線的方式計算所有父分區,不會造成網絡之間的數據混合。對于寬依賴的 RDD,則通常伴隨著 Shuffle 操作,即首先需要計算好所有父分區數據,然后在節點之間進行 Shuffle。因此,在進行數據恢復時,窄依賴只需要根據父 RDD 分區重新計算丟失的分區即可,而且可以并行地在不同節點進行重新計算。而對于寬依賴而言,單個節點失效通常意味著重新計算過程會涉及多個父 RDD 分區,開銷較大。此外,Spark 還提供了數據檢查點和記錄日志,用于持久化中間 RDD,從而使得在進行失敗恢復時不需要追溯到最開始的階段。在進行故障恢復時,Spark 會對數據檢查點開銷和重新計算 RDD 分區的開銷進行比較,從而自動選擇最優的恢復策略。

1.4. 階段的劃分

Spark 通過分析各個 RDD 的依賴關系生成了 DAG ,再通過分析各個 RDD 中的分區之間的依賴關系來決定如何劃分階段,具體劃分方法是:在 DAG 中進行反向解析,遇到寬依賴就斷開,遇到窄依賴就把當前的 RDD 加入到當前的階段中;將窄依賴盡量劃分在同一個階段中,可以實現流水線計算。例如在下圖中,首先根據數據的讀取、轉化和行為等操作生成 DAG。然后在執行行為操作時,反向解析 DAG,由于從 A 到 B 的轉換和從 B、F 到 G 的轉換都屬于寬依賴,則需要從在寬依賴處進行斷開,從而劃分為三個階段。把一個 DAG 圖劃分成多個 “階段” 以后,每個階段都代表了一組關聯的、相互之間沒有 Shuffle 依賴關系的任務組成的任務集合。每個任務集合會被提交給任務調度器(TaskScheduler)進行處理,由任務調度器將任務分發給 Executor 運行。

RDD運行機制是什么
1.5. RDD 運行過程

通過上述對 RDD 概念、依賴關系和階段劃分的介紹,結合之前介紹的 Spark 運行基本流程,這里再總結一下 RDD 在 Spark 架構中的運行過程(如下圖所示):

創建 RDD 對象;SparkContext 負責計算 RDD 之間的依賴關系,構建 DAG;DAGSchedule 負責把 DAG 圖反向解析成多個階段,每個階段中包含多個任務,每個任務會被任務調度器分發給工作節點上的 Executor 上執行。RDD運行機制是什么

到此,關于“RDD運行機制是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

rdd
AI

贵定县| 雷州市| 邳州市| 南丰县| 平阳县| 平利县| 璧山县| 壶关县| 南乐县| 玉溪市| 涡阳县| 宣汉县| 故城县| 扶余县| 桑日县| 杭锦旗| 鞍山市| 兴安盟| 南汇区| 四平市| 临城县| 英吉沙县| 涞水县| 和龙市| 白河县| 孟津县| 双辽市| 灵台县| 永胜县| 乐平市| 视频| 峨眉山市| 竹山县| 侯马市| 大埔县| 本溪市| 桐城市| 监利县| 五家渠市| 太仓市| 无棣县|