本篇文章主要是从作业提交到最后获取到作业结果,从源码的角度,但是不涉及源码进行的分析.其目的是读完本篇文章,你将对作业的基本流程有个清晰的认识。
当我们提交一个job,首先会被 DAGScheduler 通过宽窄依赖解析成一个个 stage,然后按顺序以 taskset 的形式提交 stage 给 TaskScheduler ,TaskScheduler 将 taskset 构建成 TaskSetManager 对象管理,并按照调度系统给定的策略向 Executor 提交任务,Executor 将接受的到 task 以 taskrunner 的方式执行计算出结果,并储存到 BlockManager ,然后向 TaskScheduler 返回一个记录了结果信息的MapStatus对象,并注册到 driver 端的 MapOutputTrackerMaster,然后进行下一轮的 stage 调度 (如果是ResultTask执行结果,那么数据是我们算子决定了他最后会落地在哪的)