前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Spark源码剖析] JobWaiter

[Spark源码剖析] JobWaiter

作者头像
codingforfun
发布2018-08-24 14:46:56
4000
发布2018-08-24 14:46:56
举报

职责

  • 等待DAGScheduler job完成,一个JobWaiter对象与一个job唯一一一对应
  • 一旦task完成,将该task结果填充到SparkContext.runJob创建的results数组中

构造函数

代码语言:javascript
复制
private[spark] class JobWaiter[T](
    dagScheduler: DAGScheduler,
    val jobId: Int,
    totalTasks: Int,
    resultHandler: (Int, T) => Unit)
  extends JobListener {...}

在SparkContext.runJob中,通过

代码语言:javascript
复制
val results = new Array[U](partitions.size)
runJob[T, U](rdd, func, partitions, allowLocal, (index, res) => results(index) = res)

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

重要成员及方法

代码语言:javascript
复制
private var finishedTasks = 0

已经完成的task个数


代码语言:javascript
复制
private var jobResult: JobResult = if (jobFinished) JobSucceeded else null

如果job完成,jobResult为job的执行结果。对于0个task的job,直接设置job执行结果为JobSucceeded。


代码语言:javascript
复制
  def cancel() {
    
    dagScheduler.cancelJob(jobId)
  }

发送一个信号来取消job。该取消操作本身会被异步执行。在TaskScheduler取消所有属于该job的tasks后,该job会以一个Spark异常结束。


代码语言:javascript
复制
override def taskSucceeded(index: Int, result: Any): Unit = synchronized { ... }
  • 讲该task结果,即参数result,填充到SparkContext.runJob中建立的val results = new Array[U](partitions.size)
  • finishedTasks += 1,判断finishedTasks是否与totalTasks相等,若相等,则_jobFinished = true jobResult = JobSucceeded

问:什么情况下会 taskSucceeded 方法会被调用? 答:DAGScheduler收到completion @ CompletionEvent事件后,会调用dagScheduler.handleTaskCompletion(completion),该函数会最终调用job.listener.taskSucceeded(rt.outputId, event.result),job.listener为trait JobListener对象,具体实现为JobWaiter


def awaitResult(): JobResult = synchronized { ... } 等待job结束,并返回jobResult


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015.10.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 职责
  • 构造函数
  • 重要成员及方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档