关于hadoop:深入浅出-Yarn-架构与实现44-RM-管理-Application

36次阅读

共计 1998 个字符,预计需要花费 5 分钟才能阅读完成。

在 YARN 中,Application 是指应用程序,它可能启动多个运行实例,每个运行实例由 —个 ApplicationMaster 与一组该 ApplicationMaster 启动的工作组成,它领有名称、队列、优先级等属性,是一个比拟宽泛的概念,能够是一个 MepReduce 作业、一个 DAG 应用程序等。YARN 中 Application 治理波及应用程序的权限治理、启动与敞开、生命周期治理等,本节只介绍最根本的治理内容,比方权限治理、启动与敞开等,而生命周期治理则放到下一节中介绍。

一、ApplicationACLsManager

ApplicationACLsManager 负责管理应用程序拜访权限

  • 查看权限

    • 程序根本信息:运行工夫、优先级等
  • 批改权限

    • 批改程序优先级、杀死应用程序

二、RMAppManager

RMAppManager 负责应用程序启动和敞开。接下来联合源码次要剖析启动和完结两个操作。

1、启动

在「4-1 ResourceManager 性能概述」中,提到了 ClientRMService 解决来自客户端各种 RPC 申请,比方提交、终止获取利用运行状态等。
ClientRMService 当收到客户端提交的利用后,将调用函数 RMAppManager#submitApplication 创立一个 RMApp 对象,保护应用程序的整个生命周期。

protected void submitApplication() {
    // 创立 app,并增加到 RMActiveServiceContext.applications
    RMAppImpl application =
        createAndPopulateNewRMApp(submissionContext, submitTime, user, false);

    // 发送 app start event,持续由其余事件处理器解决
    this.rmContext.getDispatcher().getEventHandler()
        .handle(new RMAppEvent(applicationId, RMAppEventType.START));
}

2、完结

当 RMAPP 运行完结后,将向 RMAPPManager 发送一个 RMAPPManagerEventType.APP_COMPLETED 事件。看源码将执行 3 个操作:

  public void handle(RMAppManagerEvent event) {ApplicationId applicationId = event.getApplicationId();
    LOG.debug("RMAppManager processing event for" 
        + applicationId + "of type" + event.getType());
    switch(event.getType()) {
      case APP_COMPLETED: 
      {finishApplication(applicationId);
        logApplicationSummary(applicationId);
        checkAppNumCompletedLimit();} 
  • finishApplication()

    • 将 Application 放入到内存的已实现列表 completedApps 中,用户可查问历史利用执行信息(如 yarn web)。
  • logApplicationSummary()

    • 打印日志信息。
  • checkAppNumCompletedLimit()

    • 下面提到的 completedApps 列表容量无限,默认 10000,可批改。超过该值时,将从在这里被移除,后续可从 History Server 中进行查看。
    • 将应用程序从 RMStateStore 中移除。RMStateStore 记录了运行中的应用程序的运行日志,当集群故障重启后,RM 可通过这些日志复原利用程序运行状态,从而防止全副从新运行,一旦利用程序运行完结后,这些日志便失去了意义,故能够对其进行删除。

三、ContainerAllocationExpirer

当 AM 取得 Container 后,必须在肯定工夫内(默认为 10min,可批改),在对应的 NM 上启动该 Container,否则 RM 将强制回收该 Container。因为 YARN 不容许 AM 长时间不对其应用,会升高整个集群的利用率。

protected void expire(AllocationExpirationInfo allocationExpirationInfo) {
  dispatcher.handle(new ContainerExpiredSchedulerEvent(allocationExpirationInfo.getContainerId(),
          allocationExpirationInfo.isIncrease()));
}

该类也继承自抽象类 AbstractLivelinessMonitor,后面曾经讲过,这里不再赘述。

正文完
 0