private[spark] trait JobListener {
def taskSucceeded(index: Int, result: Any)
def jobFailed(exception: Exception)
}
JobListener and JobWaiter
Spark subscribes for job completion or failure events (after submitting a job to DAGScheduler) using JobListener trait.
The following are the job listeners used:
-
JobWaiter waits until DAGScheduler completes a job and passes the results of tasks to a
resultHandlerfunction. -
ApproximateActionListener…FIXME
An instance of JobListener is used in the following places:
-
In
ActiveJobas a listener to notify if tasks in this job finish or the job fails. -
In
DAGScheduler.handleJobSubmitted -
In
DAGScheduler.handleMapStageSubmitted -
In
JobSubmitted -
In
MapStageSubmitted
JobListener Contract
JobListener is a private[spark] contract with the following two methods:
A JobListener object is notified each time a task succeeds (by taskSucceeded) and when the whole job fails (by jobFailed).
JobWaiter
JobWaiter[T](
dagScheduler: DAGScheduler,
val jobId: Int,
totalTasks: Int,
resultHandler: (Int, T) => Unit)
extends JobListener
JobWaiter is a custom JobListener.
It is used when DAGScheduler submits a job or submits a map stage. You can use a JobWaiter to block until the job finishes executing or to cancel it.
While the methods execute, JobSubmitted and MapStageSubmitted events are posted that reference the JobWaiter.
As a JobListener, JobWaiter gets notified about task completions or failures, using taskSucceeded and jobFailed, respectively. When the total number of tasks (that equals the number of partitions to compute) equals the number of taskSucceeded, the JobWaiter instance is marked successful. A jobFailed event marks the JobWaiter instance failed.