本文为您介绍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版本。
- 执行该修复方案后,需要重启对应的组件。重启组件可能会导致作业失败,所以建议业务低峰期时执行。
修复流程
- 替换过程中,重启一个ResourceManager待正常运行之后再重启另外一个ResoureManager。
- 如果集群没有开启高可用,则无需执行该修复流程。
回滚流程
cp /tmp/hadoop-yarn-server-resourcemanager-3.2.1.jar $HADOOP_HOME/share/hadoop/yarn/