文章出處
文章列表
Spark學習筆記總結
02. Spark任務流程
1. RDD的依賴關系
RDD和它依賴的父RDD(s)的關系有兩種不同的類型,即窄依賴(narrow dependency)和寬依賴(wide dependency)
- 窄依賴
窄依賴指的是每一個父RDD的Partition最多被子RDD的一個Partition使用
總結:窄依賴我們形象的比喻為獨生子女 - 寬依賴
寬依賴指的是多個子RDD的Partition會依賴同一個父RDD的Partition
總結:窄依賴我們形象的比喻為超生(多個子女)
查看RDD依賴關系:
整個樹形結構:rdd.toDebugString
本身:rdd.dependencies
2. DAG的生成
DAG,有向無環圖,原始的RDD通過一系列的轉換就就形成了DAG,根據RDD之間的依賴關系的不同將DAG劃分成不同的Stage,對于窄依賴,partition的轉換處理在Stage中完成計算。對于寬依賴,由于有Shuffle的存在,只能在parent RDD處理完成后,才能開始接下來的計算,因此寬依賴是劃分Stage的依據。
3. Spark任務執行流程
大致分為4步:
- 根據算子生成DAG
- 將DAG根據寬依賴切分成任務集合的stages
- Driver將具體任務分發給Worker
- Worker中的executor執行任務
- DAGScheduler和TaskScheduler都在Driver中
4. wordcount執行流程
1. wc示例代碼
//textFile會產生兩個RDD: 1. HadoopRDD -> MapPartitionsRDD
sc.textFile(INPUT_PATH)
//flatMap產生1個RDD:MapPartitionsRDD
.flatMap { _.split(" ") }
//map產生1個RDD:MapPartitionsRDD
.map { (_, 1) }
//reduceByKey產生了:ShuffledRDD
.reduceByKey(_ + _)
//暫時不管
.sortBy(_._2, false)
//saveAsTextFile產生1個RDD:MapPartitionsRDD
.saveAsTextFile(OUTPUT_PATH)
一共產生了6個RDD
2. 執行流程-切分stage
執行流程:
- 根據寬依賴劃分成了兩個stage,后面一個stage需要等待前一個計算完成
- 第一個stage中的taskSet包含了3個task
- 一個task就是一個流水線pipelining,可以與其他task并行執行,在這里,任務內容是相同的,只是數據不同。
初接觸,記下學習筆記,還有很多問題,望指導,謝謝。
文章列表
全站熱搜