Spark源碼剖析(七):Job觸發流程原理與源碼剖析

引言

咱們知道在application中每存在一個action操做就會觸發一個job,那麼spark底層是怎樣觸發job的呢?接下來咱們用一個wordcount程序來剖析一下job的觸發機制。app

解析wordcount源碼

  1. val lines = sc.textFile()

Alt text

Alt text

  1. val words = lines.flatMap(line => line.split(" "))

Alt text

  1. val pairs = words.map(word => (word, 1))

Alt text

  1. val counts = pairs.reduceByKey(_ + _) 
    其實RDD類中是沒有reduceByKey方法的,可是對RDD調用該方法時,會觸發scala的隱式轉換,會在RDD類中找到rddToPairRDDFunctions()隱式轉換,而後將RDD轉換爲PairRDDFunctions,接着會調用PairRDDFunctions類中的reduceByKey()方法。

Alt text 
  
new PairRDDFunctions(rdd)spa

Alt text

在上面咱們也能夠看到reduceByKey操做是要先在本地作combine,而後再進行reducer分發的。scala

  1. counts.foreach(count => println(count._1 + ": " + count._2))

Alt text 
  
連續調用好幾個runJob方法後code

Alt text 
  
最終調用SparkContext初始化時建立的DAGSchedule的runJob方法源碼

至此咱們知道每一個action操做都會調用DAGSchedule的runJob方法來建立一個job!it

下一篇文章咱們將詳解DAGSchedule的runJob方法並剖析DAGSchedule的stage劃分原理及源碼。spark

相關文章
相關標籤/搜索