文章出處

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步:

  1. 根據算子生成DAG
  2. 將DAG根據寬依賴切分成任務集合的stages
  3. Driver將具體任務分發給Worker
  4. Worker中的executor執行任務
  5. 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

執行流程:

  1. 根據寬依賴劃分成了兩個stage,后面一個stage需要等待前一個計算完成
  2. 第一個stage中的taskSet包含了3個task
  3. 一個task就是一個流水線pipelining,可以與其他task并行執行,在這里,任務內容是相同的,只是數據不同。

初接觸,記下學習筆記,還有很多問題,望指導,謝謝。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()