標籤:分享 理解 wordcount tor img pen ast key 業務
今天,我們就先聊一下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是窄依賴
spark中的RDD以及DAG