您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“學習Spark需要了解的RDD知識點有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“學習Spark需要了解的RDD知識點有哪些”這篇文章吧。
作業調度
當對RDD執行轉換操作時,調度器會根據 RDD 的 lineage(血統)來構建由若干調度階段(Stage) 組成的有向無環圖(DAG),每個調度階段包含盡可能多的連續窄依賴轉換。調度器按照有向 無環圖順序進行計算,并最終得到目標RDD。
調度器向各節點分配任務釆用延時調度機制并根據數據存儲位置(數據本地性)來確定。若一個任務需要處理的某個分區剛好存儲在某個節點的內存中,則該任務會分配給該節點;如果在內存中不包含該分區,調度器會找到包含該RDD的較佳位置,并把任務分配給所在節點。
對應寬依賴的操作,在Spark將中間結果物化到父分區的節點上,這和MapReduce物化 map的輸出類似,可以簡化數據的故障恢復過程。如下圖所示,實線圓角方框標識的是RDD。陰影背景的矩形是分區,若已存于內存中,則用黑色背景標識。RDD上一個行動操作的執行將 會以寬依賴為分區來構建各個調度階段,對各調度階段內部的窄依賴則前后連接構成流水線。在本例中,Stage 1的輸出已經存在內存中,所以直接執行Stage 2 ,然后執行Stage 3
Spark如何計算作業調度階段
對于執行失敗的任務,只要它對應調度階段父類信息仍然可用,該任務會分散到其他節點 重新執行。如果某些調度階段不可用(例如,因為Shuffle在map節點輸出丟失了),則重新提交相應的任務,并以并行方式計算丟失的分區。在作業中如果某個任務執行緩慢(即Straggler), 系統則會在其他節點上執行該任務的副本。該方法與MapReduce推測執行做法類似,并取最先得到的結果作為最終的結果。
調度器
RDD 模型將計算分解為多個相互獨立的細粒度任務,這使得它在多用戶集群能夠支持多種資源共享算法。特別地,每個 RDD 應用可以在執行過程中動態調整訪問資源。
Spark 提供了uoduo 種持久化 RDD 的存儲策略:
第一個選項的性能是最優的,因為可以直接訪問在Java虛擬機內存里的RDD對象;在空間有限的情況下,第二種方式可以讓用戶釆用比Java對象更有效的內存組織方式,但代價是降低了性能;第三種策略使用于RDD太大的場景,每次重新計算該 RDD會帶來額外的資源開銷(如I/O等)。
對于內存使用 LRU 回收算法來進行管理,當計算得到一個新的 RDD 分區,但沒有足夠空間來存儲時,系統會從最近最少使用的 RDD 回收其一個分區的空間。除非該 RDD 是新分區對應的 RDD,這種情況下 Spark 會將舊的分區繼續保留在內存中,防止同一個 RDD 的分區被循環調入/調出。這點很關鍵,因為大部分的操作會在一個 RDD 的所有分區上進行,那么很有可能已經存在內存中的分區將再次被使用。
以上是“學習Spark需要了解的RDD知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。