|NO.Z.00088|——————————|BigDataEnd|——|Hadoop&Spark.V04|——|Spark.v04|Spark 原理 源码|作业执行原理&Stage划分&dagScheduler.submit 发送消息|
一、stage划分
### --- dagScheduler.submit 发送消息
~~~ # 源码提取说明:DAGScheduler.scala
~~~ # 676行~703行
def submitJob[T, U](
rdd: RDD[T],
func: (TaskContext, Iterator[T]) => U,
partitions: Seq[Int],
callSite: CallSite,
resultHandler: (Int, U) => Unit,
properties: Properties): JobWaiter[U] = {
// Check to make sure we are not launching a task on a partition that does not exist.
// 获取当前Job的最大分区数
val maxPartitions = rdd.partitions.length
// 检查不存在的分区,如果有就抛出异常
partitions.find(p => p >= maxPartitions || p < 0).foreach { p =>
throw new IllegalArgumentException(
"Attempting to access a non-existent partition: " + p + ". " +
"Total number of partitions: " + maxPartitions)
}
// 生成下一个Job的jobId
val jobId = nextJobId.getAndIncrement()
/**
* 如果Job的分区数量等于0,则创建一个totalTasks属性为0的JobWaiter并返回。
* 根据JobWaiter的实现,totalTasks属性为0的JobWaiter的jobPromise将被设置为Success。
*/
if (partitions.size == 0) {
// Return immediately if the job is running 0 tasks
return new JobWaiter[U](this, jobId, 0, resultHandler)
}
assert(partitions.size > 0)
// 分区数量大于0
val func2 = func.asInstanceOf[(TaskContext, Iterator[_]) => _]
// 创建JobWaiter
val waiter = new JobWaiter(this, jobId, partitions.size, resultHandler)
/**
* 将JobWaiter包装到JobSubmitted消息中,投递给DAGSchedulerEventProcessLoop,
* 这个消息最终会被DAGScheduler的handleJobSubmitted()方法处理。
*/
eventProcessLoop.post(JobSubmitted(
jobId, rdd, func2, partitions.toArray, callSite, waiter,
SerializationUtils.clone(properties)))
// 返回JobWaiter
waiter
}
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv018-spark.v03
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通