ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【深入浅出 Yarn 架构与实现】4-4 RM 管理 Application [打印本页]

作者: 张国伟    时间: 2023-1-11 20:06
标题: 【深入浅出 Yarn 架构与实现】4-4 RM 管理 Application
在 YARN 中,Application 是指应用程序,它可能启动多个运行实例,每个运行实例由 —个 ApplicationMaster 与一组该 ApplicationMaster 启动的任务组成,它拥有名称、队列、优先级等属性,是一个比较宽泛的概念,可以是一个 MepReduce 作业、一个 DAG 应用程序等。YARN 中 Application 管理涉及应用程序的权限管理、启动与关闭、生命周期管理等,本节只介绍最基本的管理内容,比如权限管理、启动与关闭等,而生命周期管理则放到下一节中介绍。
一、ApplicationACLsManager

ApplicationACLsManager 负责管理应用程序访问权限
二、RMAppManager

RMAppManager 负责应用程序启动和关闭。接下来结合源码主要分析启动和结束两个操作。
1、启动

在「4-1 ResourceManager 功能概述」中,提到了 ClientRMService 处理来自客户端各种 RPC 请求,比如提交、终止获取应用运行状态等。
ClientRMService 当收到客户端提交的应用后,将调用函数 RMAppManager#submitApplication 创建一个 RMApp 对象,维护应用程序的整个生命周期。
  1. protected void submitApplication() {
  2.     // 创建 app,并添加到 RMActiveServiceContext.applications
  3.         RMAppImpl application =
  4.             createAndPopulateNewRMApp(submissionContext, submitTime, user, false);
  5.     // 发送 app start event,继续由其他事件处理器处理
  6.     this.rmContext.getDispatcher().getEventHandler()
  7.         .handle(new RMAppEvent(applicationId, RMAppEventType.START));
  8. }
复制代码
2、结束

当 RMAPP 运行结束后,将向 RMAPPManager 发送一个 RMAPPManagerEventType.APP_COMPLETED 事件。看源码将执行 3 个操作:
  1.   public void handle(RMAppManagerEvent event) {
  2.     ApplicationId applicationId = event.getApplicationId();
  3.     LOG.debug("RMAppManager processing event for "
  4.         + applicationId + " of type " + event.getType());
  5.     switch(event.getType()) {
  6.       case APP_COMPLETED:
  7.       {
  8.         finishApplication(applicationId);
  9.         logApplicationSummary(applicationId);
  10.         checkAppNumCompletedLimit();
  11.       }
复制代码
三、ContainerAllocationExpirer

当 AM 获得 Container 后,必须在一定时间内(默认为 10min,可修改),在对应的 NM 上启动该 Container,否则 RM 将强制回收该 Container。因为 YARN 不允许 AM 长时间不对其使用,会降低整个集群的利用率。
  1. protected void expire(AllocationExpirationInfo allocationExpirationInfo) {
  2.   dispatcher.handle(new ContainerExpiredSchedulerEvent(
  3.       allocationExpirationInfo.getContainerId(),
  4.           allocationExpirationInfo.isIncrease()));
  5. }
复制代码
该类也继承自抽象类 AbstractLivelinessMonitor,前面已经讲过,这里不再赘述。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4