Spark----RDD運算元分類 DAG

T D Z發表於2020-12-23

RDD的運算元的分類

Transformation: 即轉換運算元,呼叫轉換運算元會生成一個新的RDD, Transformation是 Lazy 的,不會觸發job執行
Action: 行動運算元,呼叫行動運算元會觸發job執行, 本質上是呼叫了sc.runJob方法, 該方法從最後一個RDD,根據
        其依賴關係,從後往前,劃分Stage,生成一個TaskSet
1.建立RDD的方法
 
(1)通過並行化方式,將Dirver端的集合轉成RDD ,可以指定分割槽的數量

 val rdd: RDD[Int] = sc.parallelize(arr) 
 rdd.partitions.length   //檢視分割槽數量

 (2)從HDFS指定目錄建立RDD ,也可以指定分割槽的數量

val lines: RDD[String] = sc.textFile("hdfs://linux01:8020/log")
rdd.partitions.length   //檢視分割槽數量     

(2.1)從hdfs中讀取資料分割槽數量 : 預設情況下 目錄檔案下所有檔案的 totalSize(檔案總大小)/NumSplits (切片數量) 得到 goalSize()
                                                      使用 檔案大小/goalSize 結果大於1.1 就分為多個切片. 
                                                      如果想要幾個block塊(檔案)就有幾個分割槽, 在建立rdd時指定計算goalSize的除數為1就可以了
                                                      val rdd1 = sc.textFile("hdfs://linux01:8020/wc",1)

DAG 有向無環圖

srage 任務執行階段
一個Stage對應一個TaskSet
一個TaskSet中的Task的數量取決於Stage中最後一個RDD分割槽的數量
dependency
依賴關係,指的是父RDD和子RDD之間的依賴關係
窄依賴:沒有shfuffle產生,多個運算元會被合併到一個Task中,即在一個pipeline中
寬依賴:有shuffle產生,是劃分Stage的依據

 

相關文章