Spark-JobWaiter

2019-01-01  本文已影响14人  丹之

介绍

等待DAGScheduler作业完成的对象。任务完成后,它会通过他们的任务结果给定的处理函数。
一个JobWaiter对象与一个job唯一一一对应,一旦task完成,将该task结果填充到SparkContext.runJob创建的results数组中

构造函数

private[spark] class JobWaiter[T](
    dagScheduler: DAGScheduler,
    val jobId: Int,
    totalTasks: Int,
    resultHandler: (Int, T) => Unit)
  extends JobListener with Logging {

在SparkContext.runJob中,通过

 def runJob[T, U: ClassTag](
      rdd: RDD[T],
      func: (TaskContext, Iterator[T]) => U,
      partitions: Seq[Int]): Array[U] = {
    val results = new Array[U](partitions.size)
    runJob[T, U](rdd, func, partitions, (index, res) => results(index) = res)
    results
  }

来创建容纳job结果的数据,数组的每个元素对应与之下标相等的partition的计算结果;并将结果处理函数(index, res) => results(index) = res作为参数传入runJob,以使在runJob内部的创建的JobWaiter对象能够在得知taskSucceeded之后,将该task的结果填充到results中。

重要方法

https://github.com/keepsimplefocus/spark-sourcecodes-analysis/blob/master/spark-core/%5BSpark%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%5D-JobWaiter.md

上一篇下一篇

猜你喜欢

热点阅读