首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Hadoop】怎么把高版本的代码合进去低版本YARN-7699

【Hadoop】怎么把高版本的代码合进去低版本YARN-7699

作者头像
runzhliu
发布2021-05-27 11:30:45
5890
发布2021-05-27 11:30:45
举报
文章被收录于专栏:容器计算容器计算容器计算

为什么会有这样的需求呢?举个例子,比如 Hadoop 3.0 有些比较 fancy 的功能,但是用户正在用着 2.8.5,但是用户也想用到 3.0 那个 fancy 的功能,那么这里就需要评估一下,把这个 3.0 的 Feature 合进来 2.8.5 了。

但是要注意,这种向后兼容,并不总是可以的,尤其是垮了大版本的软件,特别是那些大的特性,需要仔细评估才能告诉用户是否可以这么做,所以这种需求,不要一下子就答应了,要给自己留点 buffer。

一般这种向后兼容的代码合并,要比较小心,当然最好就是可以本地 debug,一边修代码,一边去做 debug,否则只是机械地合并了些代码,但是如果 Feature 里一个 if-else 的反向,就能把你给整懵逼了。

这里举个例子,针对 Yarn 的这个问题 YARN-7699,可以看到,用户是 2.8.4 的版本有问题,但是 patch 只合进去了其他版本。

在这里插入图片描述
在这里插入图片描述

那用户实在不想升级 Hadoop 版本呢,那就得仔细查看 patch 的内容,需要认真评估一下。当然了,例子里这个 patch 非常简单,只要合并进去代码就可以了。

//org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java

  /**
   * Recalculates the per-app, percent of queue metric, specific to the
   * Capacity Scheduler.
   */
  @Override
  public synchronized ApplicationResourceUsageReport getResourceUsageReport() {
    ApplicationResourceUsageReport report = super.getResourceUsageReport();
    Resource cluster = rmContext.getScheduler().getClusterResource();
    Resource totalPartitionRes =
        rmContext.getNodeLabelManager()
          .getResourceByLabel(getAppAMNodePartitionName(), cluster);
    ResourceCalculator calc = rmContext.getScheduler().getResourceCalculator();
    float queueUsagePerc = 0.0f;
    if (!calc.isInvalidDivisor(totalPartitionRes)) {
      float queueAbsMaxCapPerPartition =
          ((AbstractCSQueue)getQueue()).getQueueCapacities()
            .getAbsoluteCapacity(getAppAMNodePartitionName());
      if (queueAbsMaxCapPerPartition != 0) {
        queueUsagePerc =
            calc.divide(totalPartitionRes, report.getUsedResources(),
                Resources.multiply(totalPartitionRes,
                    queueAbsMaxCapPerPartition)) * 100;
      }
      report.setQueueUsagePercentage(queueUsagePerc);
    }
    return report;
  }
}

这里的修改跟 3.0.0 的 patch 类似 3.0.001.patch,明显就是这里的逻辑到 3.0.0 都没太大变化,所以这个合并非常顺利。

在这里插入图片描述
在这里插入图片描述

当然了,这么好搞的前提,必须是你本地的 Hadoop 环境已经 ready 了,意思就是 Import 进去 IDEA,可以非常完美地执行各种单测,这样我们在合并代码的时候,就会如虎添翼,因为可以本地 debug !关于 Hadoop 环境的问题,大家可以看看我的 blog 的其他文章,里面都有大致提到的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档