本文為您介紹YARN-4946引入缺陷的影響范圍以及相應的修復方案。

背景信息

YARN-4946引入缺陷,YARN ResourceManager刪除歷史應用作業(yè)時增加了日志收集已完成的必要條件,但日志收集的狀態(tài)沒有保留到ResourceManager State Store中,所以重啟后ResourceManager加載的歷史應用都是未完成狀態(tài),無法被ResourceManager自動刪除掉,造成application在ResourceManager中堆積。這部分應用達到上限(相關(guān)配置為${yarn.resourcemanager.state-store.max-completed-applications} 或${yarn.resourcemanager.max-completed-applications},默認值為10000)之后,會影響ResourceManager的調(diào)度。

具體缺陷引入的Issue為YARN-4946,詳情請參見YARN-4946

通過revert方式修復該缺陷的Issue為YARN-9571,詳情請參見YARN-9571

缺陷影響

  • 缺陷影響的組件:Hadoop YARN(開啟了服務高可用,并且添加了Zookeeper服務)。
  • 缺陷級別:嚴重,建議修復,集群長時間運行重啟后會導致集群不可用。
  • 缺陷發(fā)生現(xiàn)象: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不可用,或者出現(xiàn)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版本。
  • 執(zhí)行該修復方案后,需要重啟對應的組件。重啟組件可能會導致作業(yè)失敗,所以建議業(yè)務低峰期時執(zhí)行。

修復流程

按照先處理Standby ResourceManager,再處理Active ResourceManager的順序,通過JAR包替換的方式修復ResourceManager組件缺陷。
注意
  • 替換過程中,重啟一個ResourceManager待正常運行之后再重啟另外一個ResoureManager。
  • 如果集群沒有開啟高可用,則無需執(zhí)行該修復流程。
  1. 單擊hadoop-yarn-server-resourcemanager-3.2.1.jar下載YARN ResourceManager JAR包。
  2. 登錄EMR集群的Master節(jié)點,將下載好的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.”的問題,并且作業(yè)可以正常提交,則說明修復成功。
  5. 在控制臺查找Active ResourceManager,重啟YARN ResourceManager服務。

回滾流程

如果修復過程中遇到問題需要回滾,則可以執(zhí)行以下命令,使用備份路徑下的舊包替換掉補丁包,再重啟該節(jié)點上的YARN ResourceManager。
cp /tmp/hadoop-yarn-server-resourcemanager-3.2.1.jar $HADOOP_HOME/share/hadoop/yarn/