本文为您介绍YARN-4946引入缺陷的影响范围以及相应的修复方案。

背景信息

YARN-4946引入缺陷,YARN ResourceManager删除历史应用作业时增加了日志收集已完成的必要条件,但日志收集的状态没有保留到ResourceManager State Store中,所以重启后ResourceManager加载的历史应用都是未完成状态,无法被ResourceManager自动删除掉,造成application在ResourceManager中堆积。这部分应用达到上限(相关配置为${yarn.resourcemanager.state-store.max-completed-applications} 或${yarn.resourcemanager.max-completed-applications},默认值为10000)之后,会影响ResourceManager的调度。

具体缺陷引入的Issue为YARN-4946,详情请参见YARN-4946

通过revert方式修复该缺陷的Issue为YARN-9571,详情请参见YARN-9571

缺陷影响

  • 缺陷影响的组件:Hadoop YARN(开启了服务高可用,并且添加了Zookeeper服务)。
  • 缺陷级别:严重,建议修复,集群长时间运行重启后会导致集群不可用。
  • 缺陷发生现象:ResourceManager日志一直打印“Application should be expired, max number of completed apps kept in memory met: maxCompletedAppsInMemory = 10000, but not removing app XXX from memory as log aggregation have not finished yet.”,导致YARN ResourceManager不可用,或者出现ResourceManager重启之后长时间不可用的情况。

缺陷修复方案

您需要将E-MapReduce集群中包含缺陷的Hadoop YARN ResourceManager的JAR包替换掉,然后重启ResourceManager服务,重启服务时先处理Standby ResourceManager,再处理Active ResourceManager。

该修复方案:
  • 适用于EMR的4.6.0、4.7.0、4.8.0、4.9.0、5.1.0、5.2.0和5.2.1版本。
    说明 对应Hadoop的3.2.1版本。
  • 执行该修复方案后,需要重启对应的组件。重启组件可能会导致作业失败,所以建议业务低峰期时执行。

修复流程

按照先处理Standby ResourceManager,再处理Active ResourceManager的顺序,通过JAR包替换的方式修复ResourceManager组件缺陷。
注意
  • 替换过程中,重启一个ResourceManager待正常运行之后再重启另外一个ResoureManager。
  • 如果集群没有开启高可用,则无需执行该修复流程。
  1. 单击hadoop-yarn-server-resourcemanager-3.2.1.jar下载YARN ResourceManager JAR包。
  2. 登录EMR集群的Master节点,将下载好的JAR包放在Hadoop的软件安装目录下。
    本示例是在/usr/lib/hadoop-current/share/hadoop/yarn/目录。
  3. 备份旧的JAR包,并将新包拷贝到相应位置。
    mv $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-3.2.1.jar /tmp/
    cp hadoop-yarn-server-resourcemanager-3.2.1.jar $HADOOP_HOME/share/hadoop/yarn/

    命令中的$HADOOP_HOME为Hadoop的安装目录。本文示例中Hadoop的安装目录为/usr/lib/hadoop-current

  4. 重启YARN ResourceManager服务。
    观察ResourceManager重启情况,如果重启之后ResourceManager日志不再提示“but not removing app XXX from memory as log aggregation have not finished yet.”的问题,并且作业可以正常提交,则说明修复成功。
  5. 在控制台查找Active ResourceManager,重启YARN ResourceManager服务。

回滚流程

如果修复过程中遇到问题需要回滚,则可以执行以下命令,使用备份路径下的旧包替换掉补丁包,再重启该节点上的YARN ResourceManager。
cp /tmp/hadoop-yarn-server-resourcemanager-3.2.1.jar $HADOOP_HOME/share/hadoop/yarn/