快捷搜索:  汽车  科技

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的入口。

spark task执行原理,Spark源码阅读Task提交流程思维导图(1)

本文我们给出了 submitMissingTasks 的执行流程,思维导图如下:

spark task执行原理,Spark源码阅读Task提交流程思维导图(2)

Task 提交流程

文字版点击「链接」查看。

Task的提交流程涉及到的类有:

  1. DAGScheduler,job 和 stage 的调度
  2. TaskScheduler,task 的调度
  3. TaskSetManager TaskSet的状态管理
  4. SchedulerBackend,通常是 CoarseGrainedSchedulerBackend
    - SchedulerBackend 内部类 DriverEndpoint 用来接收RPC请求
    - SchedulerBackend 内部对象 executorDataMap 包含了所有 executor 的信息(其中有 executor Endpoint
  5. 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 在其中有什么作用?

猜您喜欢: