首页 > 其他分享 >【深入浅出 Yarn 架构与实现】4-4 RM 管理 Application

【深入浅出 Yarn 架构与实现】4-4 RM 管理 Application

时间:2023-01-11 18:33:19浏览次数:36  
标签:启动 应用程序 Application Yarn RM applicationId event

在 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,前面已经讲过,这里不再赘述。

标签:启动,应用程序,Application,Yarn,RM,applicationId,event
From: https://www.cnblogs.com/shuofxz/p/17044622.html

相关文章

  • 死磕rmi之远程对象
    远程对象远程对象是啥继承了UnicastRemoteObject的对象都可称为远程对象让一个对象继承UnicastRemoteObject的能力,就是把自己发布出去。UnicastRemoteObject初始化构......
  • Echarts —自定义label标签的样式(formatter,rich,添加图标等操作)
    最近公司项目中在使用Echarts绘制图表时,由于默认的label标签不能满足设计稿需求,所以研究了对label标签进行格式化的方案,了解到可以使用formatter内容格式器对标签内......
  • winform最后一次获得焦点的控件
    1、当我在界面中有多个表格控件时,只有最下方有一套增删改的按钮,我就需要记录最后一次获得焦点的是哪个控件  2、在每个gridContrl上添加一个MouseDown事件。这个事件......
  • VISUALBERT: A SIMPLE AND PERFORMANT BASELINE FOR VISION AND LANGUAGE论文阅读笔记
    摘要作者提出了VisualBERT这一框架,其由一系列的Transformerlayer组成,通过selfattention将文本与图像隐式地对齐,甚至对于语法关系也很敏感。方法VisualBERT方法的核心......
  • 手把手教您在PyCharm中连接云端资源进行代码调试
    摘要:ModelArts提供了一个PyCharm插件工具PyCharmToolKit,协助用户完成代码上传、提交训练作业、将训练日志获取到本地展示等,用户只需要专注于本地的代码开发即可。本文分......
  • 手把手教您在PyCharm中连接云端资源进行代码调试
    摘要:ModelArts提供了一个PyCharm插件工具PyCharmToolKit,协助用户完成代码上传、提交训练作业、将训练日志获取到本地展示等,用户只需要专注于本地的代码开发即可。本文分享......
  • echarts tooltip的formatter自定义样式设置
    drawPieChart(res){letchart2Total=0constdrawerData=res.map(item=>{chart2Total=chart2Total+item.value......
  • 自定义orm、CMDB资产管理系统
    1自定义ormhttps://www.cnblogs.com/liuqingzheng/article/9006025.html#了解orm底层原理2cmdb资产管理系统项目#CMDB资产管理系统就是服务器管理系统#......
  • 理解wordpress中的taxonomy category与term
    最近接触了很多PHP的东西,也学到了很多新的,就想着也利用热乎的知识优化一下基于​​Wordpress​​的极风游官网。实际操作过程中,发现其实除了php的知识以外,wordpress也还是......
  • [译]Terraform – External Data Source
    前言简而言之,外部数据源(不是特别推荐!)意味着试图从外部数据源获取一些信息并将其呈现给Terraform。Terraform外部数据源执行shell脚本或python或任何其他程序。Terraform......