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

溫馨提示×

溫馨提示×

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

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

學習Spark需要了解的RDD知識點有哪些

發布時間:2021-12-17 09:12:23 來源:億速云 閱讀:449 作者:柒染 欄目:大數據

這篇文章主要為大家展示了“學習Spark需要了解的RDD知識點有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“學習Spark需要了解的RDD知識點有哪些”這篇文章吧。


作業調度


當對RDD執行轉換操作時,調度器會根據 RDD 的 lineage(血統)來構建由若干調度階段(Stage) 組成的有向無環圖(DAG),每個調度階段包含盡可能多的連續窄依賴轉換。調度器按照有向 無環圖順序進行計算,并最終得到目標RDD。


調度器向各節點分配任務釆用延時調度機制并根據數據存儲位置(數據本地性)來確定。若一個任務需要處理的某個分區剛好存儲在某個節點的內存中,則該任務會分配給該節點;如果在內存中不包含該分區,調度器會找到包含該RDD的較佳位置,并把任務分配給所在節點。


對應寬依賴的操作,在Spark將中間結果物化到父分區的節點上,這和MapReduce物化 map的輸出類似,可以簡化數據的故障恢復過程。如下圖所示,實線圓角方框標識的是RDD。陰影背景的矩形是分區,若已存于內存中,則用黑色背景標識。RDD上一個行動操作的執行將 會以寬依賴為分區來構建各個調度階段,對各調度階段內部的窄依賴則前后連接構成流水線。在本例中,Stage 1的輸出已經存在內存中,所以直接執行Stage 2 ,然后執行Stage 3


學習Spark需要了解的RDD知識點有哪些

Spark如何計算作業調度階段


對于執行失敗的任務,只要它對應調度階段父類信息仍然可用,該任務會分散到其他節點 重新執行。如果某些調度階段不可用(例如,因為Shuffle在map節點輸出丟失了),則重新提交相應的任務,并以并行方式計算丟失的分區。在作業中如果某個任務執行緩慢(即Straggler), 系統則會在其他節點上執行該任務的副本。該方法與MapReduce推測執行做法類似,并取最先得到的結果作為最終的結果。


調度器


RDD 模型將計算分解為多個相互獨立的細粒度任務,這使得它在多用戶集群能夠支持多種資源共享算法。特別地,每個 RDD 應用可以在執行過程中動態調整訪問資源。

  • 在每個應用程序中,Spark 運行多線程同時提交作業,并通過一種等級公平調度器來實現多個作業對集群資源的共享,這種調度器和 Hadoop Fair Scheduler 類似。該算法主要用于創建基于針對相同內存數據的多用戶應用,例如:Spark SQL引擎有一個服務模式支持多用戶并行查詢。公平調度算法確保短的作業能夠在即使長作業占滿集群資源的情況下盡早完成。
  • Spark的公平調度也使用延遲調度,通過輪詢每臺機器的數據,在保持公平的情況下給予作業高的本地性。Spark支持多級本地化訪問策略(本地化),包括內存、磁盤和機架。
  • 由于任務相互獨立,調度器還支持取消作業來為高優先級的作業騰出資源。
  • Spark 中可以使用 yarn 來實現細粒度的資源共享,這使得Spark應用能相互之間或在不同的計算框架之間實現資源的動態共享,這也是spark在生產中最常用的調度方式,基于Yarn 做調度。


RDD 持久化


Spark 提供了uoduo 種持久化 RDD 的存儲策略:

  • 未序列化Java對象存在內存中
  • 序列化的數據存于內存中
  • 存儲在磁盤中

第一個選項的性能是最優的,因為可以直接訪問在Java虛擬機內存里的RDD對象;在空間有限的情況下,第二種方式可以讓用戶釆用比Java對象更有效的內存組織方式,但代價是降低了性能;第三種策略使用于RDD太大的場景,每次重新計算該 RDD會帶來額外的資源開銷(如I/O等)。


對于內存使用 LRU 回收算法來進行管理,當計算得到一個新的 RDD 分區,但沒有足夠空間來存儲時,系統會從最近最少使用的 RDD 回收其一個分區的空間。除非該 RDD 是新分區對應的 RDD,這種情況下 Spark 會將舊的分區繼續保留在內存中,防止同一個 RDD 的分區被循環調入/調出。這點很關鍵,因為大部分的操作會在一個 RDD 的所有分區上進行,那么很有可能已經存在內存中的分區將再次被使用。


CheckPoint 檢查點


雖然 lineage 可以用于錯誤后 RDD 的恢復,但是對于很長的 lineage 的 RDD 來說,這樣的恢復耗時比較長,因此需要通過檢查點操作(Checkpoint)保存到外部存儲中。

通常情況下,對于包含寬依賴的長 lineage 的 RDD 設置檢查點操作是非常有用的。在這種情況下,集群中某個節點出現故障時,會使得從各個父RDD計算出的數據丟失,造成需要重新計算。相反,對于那些窄依賴的RDD.對其進行檢査點操作就不是有必須。在這種情況下如果一個節點發生故障,RDD在該節點中丟失的分區數據可以通過并行的方式從其他節點中重新計算出來,計算成本只是復制RDD的很小部分。

Spark提供為RDD設置檢查點操作的API,可以讓用戶自行決定需要為那些數據設置檢查點操作。另外由于RDD的只讀特性,使得不需要關心數據一致性問題,比常用的共享內存更容易做檢查點。

以上是“學習Spark需要了解的RDD知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

大安市| 岳普湖县| 惠来县| 讷河市| 平远县| 黎平县| 沐川县| 宁乡县| 秦皇岛市| 无极县| 天水市| 萨迦县| 新乡市| 东乌| 萍乡市| 榆林市| 东丰县| 郧西县| 札达县| 广西| 太原市| 宁安市| 雅安市| 大关县| 旅游| 交口县| 乐亭县| 安徽省| 商城县| 鄂托克前旗| 禄劝| 呼图壁县| 错那县| 南乐县| 博爱县| 青田县| 临猗县| 米易县| 菏泽市| 文安县| 凭祥市|