咱们知道在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