【Spark】RDD的依賴關係

Spark Lineage(血統)

  • Lineage利用內存加快數據加載,在其它的In-Memory類數據庫或Cache類系統中也有實現。Spark的主要區別在於它採用血統(Lineage)來時實現分佈式運算環境下的數據容錯性(節點失效、數據丟失)問題。RDD Lineage被稱爲RDD運算圖RDD依賴關係圖,是RDD所有父RDD的圖。它是在RDD上執行transformations函數並創建邏輯執行計劃(logical execution plan)的結果,是RDD的邏輯執行計劃。相比其它系統的細顆粒度的內存數據更新級別的備份或者LOG機制,RDD的Lineage記錄的是粗顆粒度的特定數據轉換(Transformation)操作(filter, map, join etc.)行爲。當這個RDD的部分分區數據丟失時,它可以通過Lineage找到丟失的父RDD的分區進行局部計算來恢復丟失的數據,這樣可以節省資源提高運行效率。這種粗顆粒的數據模型,限制了Spark的運用場合,但同時相比細顆粒度的數據模型,也帶來了性能的提升。
  • RDD只支持粗粒度轉換,即在大量記錄上執行的單個操作。將創建RDD的一系列Lineage(血統)記錄下來,以便恢復丟失的分區。RDD的Lineage會記錄RDD的元數據信息和轉換行爲,當該RDD的部分分區數據丟失時,它可以根據這些信息來重新運算和恢復丟失的數據分區。
    在這裏插入圖片描述

注意:RDD和它依賴的父RDD(s)的關係有兩種不同的類型,即窄依賴(narrow dependency)和寬依賴(wide dependency)。

窄依賴

  • 窄依賴指的是每一個父RDD的Partition最多被子RDD的一個Partition使用,窄依賴我們形象的比喻爲獨生子女.
    在這裏插入圖片描述

寬依賴

  • 寬依賴指的是多個子RDD的Partition會依賴同一個父RDD的Partition,會引起shuffle,總結:寬依賴我們形象的比喻爲超生.
    在這裏插入圖片描述

DAG

  • DAG(Directed Acyclic Graph)叫做有向無環圖,原始的RDD通過一系列的轉換就就形成了DAG,根據RDD之間的依賴關係的不同將DAG劃分成不同的Stage,對於窄依賴,partition的轉換處理在Stage中完成計算。對於寬依賴,由於有Shuffle的存在,只能在parent RDD處理完成後,才能開始接下來的計算,因此寬依賴是劃分Stage的依據
    在這裏插入圖片描述

任務劃分

RDD任務切分中間分爲:Application、Job、Stage和Task

  • Application:初始化一個SparkContext即生成一個Application
  • Job:一個Action算子就會生成一個Job
  • Stage:根據RDD之間的依賴關係的不同將Job劃分成不同的Stage,遇到一個寬依賴則劃分一個Stage。
  • Task:Stage是一個TaskSet,將Stage劃分的結果發送到不同的Executor執行即爲一個Task。

注意:Application->Job->Stage-> Task每一層都是1對n的關係。

WordCount的運行規劃圖
在這裏插入圖片描述
你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章