spark task执行原理,Spark源码阅读Task提交流程思维导图
spark task执行原理,Spark源码阅读Task提交流程思维导图火山模型 和 Codegen 在这个过程中是如何体现的?而ExecutorBackend 在 executor 端,driver 和 executor 之间通过RPC请求进行交互。Task的提交流程涉及到的类有:DAGScheduler、TaskScheduler、TaskSetManager、SchedulerBackend 都在driver端。这些类的对象有时候会相互持有,对它们的关系这里不做过多展开,只说一些case。在 driver内部的通信通常是持有一个对象,通过函数调用来实现。但也有 EventLoop (dag scheduler event loop) 的方式,DAGScheduler 的一些方法被 TaskScheduler 和 TaskSetManager 调用,走的就是 EventLoop。
上一期文章说了下 Job 和 Stage 的提交流程和代码调用链路,本期接着 submitStage 开始看。submitStages 调用了 submitMissingTasks,这个函数是Spark提交Task的入口。
本文我们给出了 submitMissingTasks 的执行流程,思维导图如下:
Task 提交流程
文字版点击「链接」查看。
Task的提交流程涉及到的类有:
- DAGScheduler,job 和 stage 的调度
- TaskScheduler,task 的调度
- TaskSetManager TaskSet的状态管理
- SchedulerBackend,通常是 CoarseGrainedSchedulerBackend
- SchedulerBackend 内部类 DriverEndpoint 用来接收RPC请求
- SchedulerBackend 内部对象 executorDataMap 包含了所有 executor 的信息(其中有 executor Endpoint - ExecutorBackend,通常是 CoarseGrainedExecutorBackend
- Executor 类,实际处理task
DAGScheduler、TaskScheduler、TaskSetManager、SchedulerBackend 都在driver端。这些类的对象有时候会相互持有,对它们的关系这里不做过多展开,只说一些case。
在 driver内部的通信通常是持有一个对象,通过函数调用来实现。但也有 EventLoop (dag scheduler event loop) 的方式,DAGScheduler 的一些方法被 TaskScheduler 和 TaskSetManager 调用,走的就是 EventLoop。
而ExecutorBackend 在 executor 端,driver 和 executor 之间通过RPC请求进行交互。
延伸思考火山模型 和 Codegen 在这个过程中是如何体现的?
ShuffleMapTask 执行过程中,Shuffle Write 和 Shuffle Read 是怎么进行的,ShuffleService 在其中如何工作? 一直被忽视的 BlockManager 在其中有什么作用?