spark中的RDD以及DAG


今天,我們就先聊一下spark中的DAG以及RDD的相關的內容

  1.DAG:有向無環圖:有方向,無閉環,代表着數據的流向,這個DAG的邊界則是Action方法的執行

  

  2.如何將DAG切分stage,stage切分的依據:有寬依賴的時候要進行切分(shuffle的時候,

  也就是數據有網絡的傳遞的時候),則一個wordCount有兩個stage,

  一個是reduceByKey之前的,一個事reduceByKey之后的(圖1),

  則我們可以這樣的理解,當我們要進行提交上游的數據的時候,

  此時我們可以認為提交的stage,但是嚴格意義上來講,我們提交的是Task

  sets(Task的集合),這些Task可能業務邏輯相同,就是處理的數據不同

 

  3.流程

  構建RDD形成DAG遇到Action的時候,前面的stage先提交,提交完成之后再交給

  下游的數據,在遇到TaskScheduler,這個時候當我們遇到Action的方法的時候,我們

  就會讓Master決定讓哪些Worker來執行這個調度,但是到了最后我們真正的傳遞的

  時候,我們用的是Driver給Worker傳遞數據(其實是傳遞到Excutor里面,這個里面執行

  真正的業務邏輯),Worker中的Excutor只要啟動,則此后就和Master沒有多大關系了

  4.寬窄依賴

  RDD和它依賴的父RDD(s)的關系有兩種不同的類型,即窄依賴(narrow dependency)以及

  寬依賴(wide dependency).

  

    窄分區的划分依據,如果后面的一個RDD,前面的一個RDD有一個唯一對應的RDD,

    則此時就是窄依賴,就相當於一次函數,y對應於一個x,而寬依賴則是類似於,前面的

    一個RDD,則此時一個RDD對應多個RDD,就相當於二次函數,一個y對應多個x的值

    5.DAG的生成

    DAG(Directed Acyclic Graph)叫做有向無環圖,原始的RDD通過一系列的轉換就形成

    DAG,根據RDD的之間的依賴關系的不同將DAG划分為不同的stage,對於窄依賴,

    partition的轉換處理在stage中完成計算,對於寬依賴,由於有shuffle的存在,只能在

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

    一般我們認為join是寬依賴,但是對於已經分好區的join來說,我們此時可以認為這個

    時候的join是窄依賴


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM