《spark内核 架构设计与实现原理》 读书笔记3-----Executer
概论---driver与worker的计算关系
executor部分的逻辑比较直接:
如上图所示,在driver进程的运行空间里,创建一个context变量,context变量通过Cluster Manager确立起与worker之间的联系,每个worker完成主程序分发下来的部分任务。
task的执行
当executor收到LaunchTask的消息之后,executor会通过函数launchTask启动一个task,executor上会为每一个task启动一个叫做TaskRunner的线程,线程本身来自于一个线程池。
每一个taskRunner的线程都会创建一个TaskContext的上下文环境类,在这个变量中保存着线程执行所需要的local变量,taskRunner的入口函数为runTask,它支持两种类型的task分别是:
ResultTask和ShuffleMapTask,taskRunner会将自身的执行结果汇报给Driver,汇报的消息种类包括:FINISHED,FAILED,LOST,KILLED.