咱們知道在application中每存在一個action操做就會觸發一個job,那麼spark底層是怎樣觸發job的呢?接下來咱們用一個wordcount程序來剖析一下job的觸發機制。app
val lines = sc.textFile()
val words = lines.flatMap(line => line.split(" "))
val pairs = words.map(word => (word, 1))
val counts = pairs.reduceByKey(_ + _)
new PairRDDFunctions(rdd)spa
在上面咱們也能夠看到reduceByKey操做是要先在本地作combine,而後再進行reducer分發的。scala
counts.foreach(count => println(count._1 + ": " + count._2))
連續調用好幾個runJob方法後code
最終調用SparkContext初始化時建立的DAGSchedule的runJob方法
源碼
至此咱們知道每一個action操做都會調用DAGSchedule的runJob方法來建立一個job!it
下一篇文章咱們將詳解DAGSchedule的runJob方法並剖析DAGSchedule的stage劃分原理及源碼。spark