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

相关文章
相关标签/搜索