YARN任务监控界面Aggregate Resource Allocation指标解析

YARN的原生任务监控界面中,我们经常能看到Aggregate Resource Allocation这个指标(图中高亮选中部分),这个指标表示该任务拥有的所有container每秒所消耗的资源(内存、CPU)总和:

Aggregate Resource Allocation是在org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerApplicationAttempt类中进行计算的,主要逻辑如下:

  // 资源信息更新间隔:3秒
  private static final long MEM_AGGREGATE_ALLOCATION_CACHE_MSECS = 3000;
  // 最后更新时间、最后更新时的每秒的内存和CPU使用量
  protected long lastMemoryAggregateAllocationUpdateTime = 0;
  private long lastMemorySeconds = 0;
  private long lastVcoreSeconds = 0;

 /**
   * 返回任务拥有的所有container每秒所消耗的资源(内存、CPU)总和
   * @return
   */
  synchronized AggregateAppResourceUsage getRunningAggregateAppResourceUsage() {
    long currentTimeMillis = System.currentTimeMillis();
    // Don't walk the whole container list if the resources were computed
    // recently.
    // 判断是否达到更新条件:当前时间 - 最后更新时间 > 最大更新间隔(3秒)
    if ((currentTimeMillis - lastMemoryAggregateAllocationUpdateTime)
        > MEM_AGGREGATE_ALLOCATION_CACHE_MSECS) {
      long memorySeconds = 0;
      long vcoreSeconds = 0;
      // 迭代所有的container,计算每个container每秒所消耗的资源(内存、CPU)
      for (RMContainer rmContainer : this.liveContainers.values()) {
        // 获取container的运行时间
        long usedMillis = currentTimeMillis - rmContainer.getCreationTime(); 
        // 计算container每秒所消耗的资源(内存、CPU)
        Resource resource = rmContainer.getContainer().getResource();
        // 汇总内存和CPU使用量
        memorySeconds += resource.getMemory() * usedMillis /  
            DateUtils.MILLIS_PER_SECOND;
        vcoreSeconds += resource.getVirtualCores() * usedMillis  
            / DateUtils.MILLIS_PER_SECOND;
      }
      
      // 记录最后更新任务资源使用情况的时间、任务最后每秒使用的内存和CPU数量
      lastMemoryAggregateAllocationUpdateTime = currentTimeMillis;
      lastMemorySeconds = memorySeconds;
      lastVcoreSeconds = vcoreSeconds;
    }
    return new AggregateAppResourceUsage(lastMemorySeconds, lastVcoreSeconds);
  }

  /**
   * 返回任务使用的资源情况
   * @return
   */
  public synchronized ApplicationResourceUsageReport getResourceUsageReport() {
    AggregateAppResourceUsage resUsage = getRunningAggregateAppResourceUsage();
    // 返回任务所使用的资源情况:所使用的container数量、预留的container数量、当前消耗的资源、当前预留的资源、所需的总资源(当前消耗的资源+当前预留的资源)、每秒的内存和CPU使用量
    return ApplicationResourceUsageReport.newInstance(liveContainers.size(),
               reservedContainers.size(), Resources.clone(currentConsumption),
               Resources.clone(currentReservation),
               Resources.add(currentConsumption, currentReservation),
               resUsage.getMemorySeconds(), resUsage.getVcoreSeconds());
  }

getResourceUsageReport方法是一个用synchronized关键字修饰的同步方法,被在org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler类的getAppResourceUsageReport方法中调用。因此,synchronized关键字在这里起的是对象锁的作用,保证在同一时刻多个线程更新任务资源使用信息时,不会产生并发更新问题。

 @Override
  public ApplicationResourceUsageReport getAppResourceUsageReport(
      ApplicationAttemptId appAttemptId) {
    SchedulerApplicationAttempt attempt = getApplicationAttempt(appAttemptId);
    if (attempt == null) {
      if (LOG.isDebugEnabled()) {
        LOG.debug("Request for appInfo of unknown attempt " + appAttemptId);
      }
      return null;
    }
    return attempt.getResourceUsageReport();
  }

转载于:https://my.oschina.net/dabird/blog/3100143

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Yarn任务监控系统是一种用于监控和管理Yarn集群中任务状态和资源使用情况的系统。Yarn是Apache Hadoop生态系统的一个核心组件,用于资源管理和任务调度,可以支持各种类型的分布式计算任务。 基于Yarn任务监控系统可以通过收集Yarn集群中所有任务运行状态和资源使用情况,有效地帮助用户实时了解任务的进程、性能和资源消耗状况。 该任务监控系统通常由以下几个模块组成: 1. 数据收集模块:定期从Yarn集群中的ResourceManager和NodeManager获取任务的相关信息,包括任务运行状态、资源使用情况等。 2. 数据存储模块:将收集到的任务信息存储到数据库或其他存储系统中,以便后续查询和分析。 3. 数据展示模块:为用户提供可视化的任务监控界面,展示任务运行状态、资源使用情况和历史数据等。用户可以通过该界面实时查看任务的执行情况,并进行性能分析和故障排查。 4. 告警模块:可以设置任务状态和资源使用的告警规则,当任务出现异常情况时,系统会自动发出告警通知,提醒用户及时处理。 基于Yarn任务监控系统的优势在于可以实时监控和管理Yarn集群中的任务,帮助用户及时发现和解决任务的问题,提高任务的执行效率和稳定性。 总之,基于Yarn任务监控系统通过收集、存储和展示任务相关信息,为用户提供实时的任务监控和管理功能,是提高Yarn集群管理效率和任务执行质量的重要工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值