Spark源码学习一 (DAGScheduler 作业处理事件模型)
执行时序图
解释:
在DAGScheduler初始化的时候,即创建了个事件处理器,该事件处理器继承于EventLoop中的所有方法和事件队列。在DAG事件处理器初始化前,需先执行父类EventLoop的构造方法,构造方法内,新建了一个线程 dag-scheduler-event-loop ,该线程专门用于轮训处理事件队列中的事件,并把它交给 DAG事件处理器的onRecieve方法处理。
事件发布执行实例:
- 当rdd执行行动算子时(如collect、count),会调用 runJob方法
- 而后调用DAGScheduler中的 submitJob方法,进行一些前置判断处理后
- 而后DAGSchedulerEventLoop调用父类 EventLoop 的 post方法 往eventQueue中添加事件
- 而后利用DAGScheduler的事件处理模型,轮训eventQueue中的事件,最后交给 子类 DAGSchedulerEventLoop.doOnReceive 方法对事件类型进行模式匹配
- 而后根据事件类型调用相应的 handleXXX方法进行具体的事件处理