ShuffleMapTask执行结果和Driver的交互原理及源码
Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送launchTasks消息,CoarseGrainedExecutorBackend收到launchTasks消息以后会调用executor.launchTask。 通过launchTask来执行Task,launchTask方法中根据传入的参数:taskId、尝试次数、任务名称, 序列化后的任务创建一个TaskRunner,在threadPool 中执行TaskRunner。 TaskRunner内部会先做一些准备工作:例如反序列化Task的依赖,通过网络来获取需要的文件、Jar等 ;然后调用反序列化后的Task.run方法来执行任务并获得执行结果:
Executor.scala源码
1. override def run(): Unit = {
2. …….
3. val value = try {
4. val res = task.run(
5. taskAttemptId = taskId,
6. attemptNumber = attempt