天天看點

DAG-有向無環圖

DAG(Directed Acyclic Graph)叫做有向無環圖,原始的RDD通過一系列的Transformation轉換就形成了DAG。在spark中,RDD與RDD之間的轉換關系稱之為血緣;根據不同的Transformation算子,可以将血緣分為兩類,窄依賴和寬依賴。
DAG是有邊界的:開始(通過SparkContext建立的RDD),結束(觸發Action,調用run Job就是一個完整的DAG就形成了,一旦觸發Action就形成了一個完整的DAG),是以,一個DAG由一個或多個RDD組成。
RDD在進行Transformation算子轉換(即父RDD生成子RDD的過程),如果不手動改變子RDD的分區數量,新生成的子RDD的分區個數會與父RDD的分區數量保持一緻。是以,當子RDD的各個分區的資料都來源于父RDD的一個分區(即:子RDD的一個分區資料隻依賴父RDD的一個分區)時,這種血緣關系,稱之為窄依賴;當子RDD的一個分區的資料來源于多個父RDD(這些父RDD的資料全部傳遞到一個分區)時,此時的血緣關系任然是窄依賴。這種窄依賴的事例:兩個RDD先進行"groupByKey"操作,在進行"join"操作,并且在這些操作過程中,沒有改變新生産的RDD的分區個數與分區器時,這樣的"join"操作就是一個窄依賴操作,其他的"join"操作都是寬依賴。
當父RDD的一個分區的資料傳遞給子RDD(此過程為Shuffle)的多個分區(即:子RDD的多個分區依賴父RDD的一個分區)時,這種血緣關系,稱之為寬依賴。在寬依賴處會發生Shuffle,他是切分Stage(排程階段)的依據;在Shuffle前,會将資料寫入到磁盤中,以友善子RDD各個分區來拉取。

寬依賴與窄依賴

DAG-有向無環圖

繼續閱讀