yarn:调度框架,基于事件
AsyncDispatcher:异步事件分发器,总管道
参数:
事件队列:BlockingQueue<Event> eventQueue
事件分发器:eventDispatchers = new HashMap<Class<? extends Enum>, EventHandler>()
方法:
dispatch(event):将事件进行分发到对应的事件处理器 EventHandler
内部类:
GenericEventHandler,将事件添加到队列中,implements EventHandler
ApplicationAttemptEventDispatcher:二次分发,implements EventHandler
handle(RMAppAttemptEvent event)
调用rmAppAttempt.handle(event);
RMAppImpl:implements EventHandler
handle(e):事件处理
远程调试准备:
1.设置ResourceManagers 的 JVM 开启远程调试功能。
enable_yarn-remotedebug.sh:启用脚本
export YARN_RESOURCEMANAGER_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000"
disable_yarn-remotedebug.sh:停用脚本
export YARN_RESOURCEMANAGER_OPTS=
2.执行脚本,并source *.sh 生效
3.启动 start-yarn.sh
4.在win7下配置eclipse的远程调试,连接到RM的8000端口
a.Re sourceManager 的main方法添加断点
5.在ResourceManager类上选择Debug as--> debug configuration
6.打开调试窗口 --》remote java Application
connectionType:socket attack
Host:s0
port:8000
job:
1.application
2.application 基于状态机模型。
NEW
NEW_SAVING
SUBMITTED
ACCEPTED
RUNNING
FINISHED
FAILED
KILLED
3.状态之间的变换通过事件触发的。