Hadoop Yarn框架底层事件(七)
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
原理
-
AsyncDispatcher:异步事件分发器
-
AsyncDispatcher中有一个阻塞队列,一个线程用来轮询队列然后交给事件分发器
* eventQueue.take();提取事件,然后dispatch(event)对事件进行分发
dispatch实现
取出事件声明的类型,按照事件类型从事件分发器中提取事件处理器,然后调用处理器的处理方法
内部类GenericEventHandler向事件队列加入事件
在ResourceManger中有ApplicationAttemptEventDispatcher事件分发器,使用handle方法处理事件,处理RMAppAttemptEvent
二次分发的原因,每一个应用都有自己的RMAppImpl对象
在ResourceManger中:
RMApp rmApp = this.remContex.getRMApps().get(APPAttemptId);