Capacity Scheduler(基于hadoop 2.7.6)
Capacity Scheduler 主要功能:
1.应用程序初始化
应用程序提交到ResourceManager后,ResouceManager会向Capacity Scheduler发送一个SchedulerEventType.APP_ADDED事件,Capacity Scheduler收到该事件后,将为应用程序创建一个SchedulerApplication(主要包括queue,user,FiCaSchedulerApp成员)对象跟踪和维护该应用程序的运行时信息,同时将应用程序提交到对应的叶子队列,叶子队列会对应用程序进行一系列合法性检查,等待分配.
2.资源调度
当ResourceManager收到来自NodeManager发送的心跳信息后,将向Capacity Scheduler发送一个SchedulerEventType.NODE_UPDATE事件,Capacity Scheduler收到该事件后,会依次进行一下操作:
(1)处理心跳信息
(2)资源分配
APP_ADDED事件的主要处理逻辑:
1.创建SchedulerApplication(主要包括queue,user,FiCaSchedulerApp成员)对象跟踪和维护该应用程序的运行时信息,FiCaSchedulerApp在处理APP_ATTEMPT_ADDED事件时实例化.后续的资源调度分配都是基于该FiCaSchedulerApp对象.
2.触发RMAppEventType.APP_ACCEPTED事件,该事件由StartAppAttemptTransition转换器处理.
下面贴贴APP_ADDED事件处理的代码清单:
@Override
public void CapacityScheduler.handle(SchedulerEvent event) {
...省略...
case APP_ADDED:
{
AppAddedSchedulerEvent appAddedEvent = (AppAddedSchedulerEvent) event;
String queueName =
resolveReservationQueueName(appAddedEvent.getQueue(),
appAddedEvent.getApplicationId(),
appAddedEvent.getReservationID());
if (queueName != null) {
if (!appAddedEvent.getIsAppRecovering()) {
addApplication(appAddedEvent.getApplicationId(), queueName,appAddedEv