寬依賴窄依賴 stage劃分

2021-08-16 06:09:56 字數 2152 閱讀 8304

rdd和它依賴的父rdd(s)的關係有兩種不同的型別,即窄依賴(narrow dependency)和寬依賴(wide dependency)。

窄依賴指的是每乙個父rdd的partition最多被子rdd的乙個partition使用

總結:窄依賴我們形象的比喻為獨生子女

寬依賴指的是多個子rdd的partition會依賴同乙個父rdd的partition

總結:窄依賴我們形象的比喻為超生

窄依賴:可以理解為獨生子女

寬依賴:可以理解為超生

如上圖所示,乙個檔案被textfile後經過兩次轉換,每次轉換後生成的新的rdd都和原分割槽一一對應,為窄依賴關係。

當map運算元計算失敗時,可以直接去上一步的rdd中重新計算,而不需要其他的分割槽參與。但是如果最後的action運算元在計算某個rdd時,計算失敗,將會到上一層的多個分割槽中尋找依賴關係,比較麻煩。

stage解決了這個問題,它根據寬依賴和窄依賴的關係進行換分,如上圖將存在窄依賴關係的rdd換分成為乙個stage。

叫做有向無環圖,原始的

rdd通過一系列的轉換就就形成了

dag,根據

rdd之間的依賴關係的不同將

dag劃分成不同的

stage

,對於窄依賴,

partition

的轉換處理在

stage

中完成計算。對於寬依賴,由於有

shuffle

的存在,只能在

parent rdd

處理完成後,才能開始接下來的計算,因此寬依賴是劃分stage的依據

作業執行流程描述:

1、客戶端啟動後直接執行使用者程式,啟動

driver

dagscheduler

和blockmanagermaster等。2

、客戶端的

driver

向master

註冊。3

、master

還會讓worker

啟動exeuctor

。worker

建立乙個

executorrunner

執行緒,executorrunner

會啟動executorbackend

程序。4

、executorbackend

啟動後會向

driver

的schedulerbackend

註冊。driver

的dagscheduler

解析作業並生成相應的

stage

,每個stage

包含的task

通過taskscheduler

分配給executor

執行。5

、所有stage

都完成後作業結束。

簡單理解:

首先driver和master通訊(提交任務,申請資源,傳送driverurl位址)如 spark-submit ***.jar --total-executor-cores 2 --executor-memory 512,該命令執行後master會根據提交的資訊申請資源;

master主要做幾件事情:1拿出所有workers上的資源;2按照資源的大小進行排序;3按照排序順序取資源;4讓worker啟動executor。

最後把任務換分為stage,將stage新增到taskset中。迴圈taskset,將task下發。

寬依賴和窄依賴 Spark 寬依賴和窄依賴

1.前言 上一節spark dag概述 spark中rdd的高效與dag圖有著莫大的關係,在dag排程中需要對計算過程劃分stage,暴力的理解就是stage的劃分是按照有沒有涉及到shuffle來劃分的,沒涉及的shuffle的都劃分在乙個stage裡面,這種劃分依據就是rdd之間的依賴關係。針對...

寬依賴與窄依賴

1 寬依賴 英文全名 shuffledependency。本質如其名,就是shuffle。每乙個父rdd的partition中的資料,都可能會傳輸一部分,到下乙個rdd的partition中,此時會出現,父rdd和子rdd的partition之間,具有交錯複雜的關係。那麼這兩個rdd之間就是寬依賴,...

寬依賴和窄依賴

寬依賴和窄依賴如下圖所示 相比於寬依賴,窄依賴對優化很有利 主要基於以下兩點 寬依賴往往對應著shuffle操作,需要在執行過程中將同乙個父rdd的分割槽傳入到不同的子rdd分割槽中,中間可能涉及多個節點之間的資料傳輸 而窄依賴的每個父rdd的分割槽只會傳入到乙個子rdd分割槽中,通常可以在乙個節點...