Yarn框架底层事件分发原理

hadoop yarn调度框架 调度mr作业 基于事件

job

  • 对应application

  • applicatio基于状态机模型,后台web页面Applications下面的每个标签对应一种状态,有

    new
    new saving
    submitted
    accepted
    running
    finished
    failed
    killed

  • 状态之间的变换通过事件触发

核心类

  • AsyncDispatcher

  • ResourceManager.ApplicationEventDispatcher

  • RMAppEvent

  • RMAppEventType

  • RMAppImpl

  • RMStateStore

原理

QQ截图20170224112110.jpg

QQ截图20170224113451.png

  • AsyncDispatcher:异步事件分发器

  • AsyncDispatcher中有一个阻塞队列,一个线程用来轮询队列然后交给事件分发器

* eventQueue.take();提取事件,然后dispatch(event)对事件进行分发

dispatch实现

取出事件声明的类型,按照事件类型从事件分发器中提取事件处理器,然后调用处理器的处理方法

内部类GenericEventHandler向事件队列加入事件

在ResourceManger中有ApplicationAttemptEventDispatcher事件分发器,使用handle方法处理事件,处理RMAppAttemptEvent

二次分发的原因,每一个应用都有自己的RMAppImpl对象

在ResourceManger中:

RMApp rmApp = this.remContex.getRMApps().get(APPAttemptId);