AM启动--AttemptStoredTransition(四)

AttemptStoredTransition(基于hadoop 2.7.6)

主要逻辑:
    1.将在AttemptStartedTransition中创建的ClientToken记录到ClientToAMTokenSecretManagerInRM的列表masterKeys中

    2.触发AMLauncherEventType.LAUNCH事件

AttemptStoredTransition转换处理后,RMAppAttemptState状态由ALLOCATED_SAVING转换为ALLOCATED.

代码清单:

/**
   *	1.将在AttemptStartedTransition中创建的ClientToken记录到
   * 		ClientToAMTokenSecretManagerInRM的列表masterKeys中 
   * 	2.触发AMLauncherEventType.LAUNCH事件
   *
   */
  private static final class AttemptStoredTransition extends BaseTransition {
    @Override
    public void transition(RMAppAttemptImpl appAttempt,
                                                    RMAppAttemptEvent event) {
    	/**
    	 * 	将在AttemptStartedTransition中创建的ClientToken记录到
    	 * 	ClientToAMTokenSecretManagerInRM的列表masterKeys中
    	 */
      appAttempt.registerClientToken();
      /**
       * 	触发AMLauncherEventType.LAUNCH事件
       */
      appAttempt.launchAttempt();
    }
  }

触发AMLauncherEventType.LAUNCH事件:

 private void launchAttempt(){
    launchAMStartTime = System.currentTimeMillis();
    // Send event to launch the AM Container
    eventHandler.handle(new AMLauncherEvent(AMLauncherEventType.LAUNCH, this));
  }

怎么去找AMLauncherEventType.LAUNCH类型事件的处理者呢?
我们可以去ResourceManager里AMLauncherEventType类型注册的调度器:

applicationMasterLauncher = createAMLauncher();
      rmDispatcher.register(AMLauncherEventType.class,
          applicationMasterLauncher);
protected ApplicationMasterLauncher createAMLauncher() {
    return new ApplicationMasterLauncher(this.rmContext);
  }

上述通过初始化相关的代码内容,我们知道要去看ApplicationMasterLauncher的handle方法,这里采用了生产者消费者的设计模式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值