大数据技术分享

Spark系列——作业原理详解

2019-10-29  本文已影响0人  code_solve

前言

本篇文章主要是从作业提交到最后获取到作业结果,
从源码的角度,
但是不涉及源码进行的分析.
其目的是读完本篇文章,
你将对作业的基本流程有个清晰的认识。
当然如果你阅读过源码,
那么读起来应该会比较舒服,
否则可能会有一定不适,
因为本文写的不是那么有逻辑~~~

1.任务提交过程

2.划 分 调 度 阶 段

3.提 交 调 度 阶 段

4.提 交 任 务

5.执 行 任 务

6.获 取 执 行 结 果

同时也需要判断该 Stage 的 task 是否已经全部完成,
如果完成,那么将开始下一轮的Stage任务。

以上是成功消息的处理,如果是失败的任务,
并且在 TaskSchedulerImpl 重试 3 次后还是失败,
那么会 将消息失败的任务通知 DAGScheduler ,
DAGScheduler 会对整个 Stage 进行4次重试,
如果还是失败,那么整个任务就失败了

总结

当我们提交一个job,
首先会被 DAGScheduler 通过宽窄依赖解析成一个个 stage,
然后按顺序将 stage 以 taskset 的形式提交给 TaskScheduler ,
TaskScheduler 将 taskset 构建成 TaskSetManager 对象管理,
并按照调度系统给定的策略向 Executor 提交任务,
Executor 将接受的到 task 以 taskrunner 的方式执行计算出结果,
并储存到 BlockManager ,
然后向 TaskScheduler 返回一个记录了结果信息的MapStatus对象,
并注册到 driver 端的 MapOutputTrackerMaster,
然后进行下一轮的 stage 调度 (如果是ResultTask执行结果,那么数据是我们算子决定了他最后会落地在哪的)

上一篇下一篇

猜你喜欢

热点阅读