
# ALM-14013 NameNode FsImage文件更新失败
#### 告警解释
HDFS的元数据信息存储在NameNode数据目录（由配置项"dfs.namenode.name.dir"指定）中的FsImage文件中。备NameNode会周期将已有的FsImage和JournalNode中存储的Editlog合并生成新的FsImage，然后推送到主NameNode的数据目录。这个周期由HDFS的配置项"dfs.namenode.checkpoint.period"指定，默认为3600秒，即1个小时。如果主NameNode数据目录的FsImage没有更新，则说明HDFS元数据合并功能异常，需要修复。
在主NameNode节点上，系统每5分钟检测其上的FsImage文件的信息。如果在三个合并周期没有新的FsImage文件生成，则系统产生该告警。
当新的FsImage文件生成并成功推送到主NameNode，说明HDFS元数据合并功能恢复正常，告警自动恢复。
#### 告警属性
| 告警ID  | 告警级别 | 是否自动清除 |
|:---|:---|:---|
| 14013 | 重要   | 是      |
   
#### 告警参数
| 参数名称         | 参数含义                |
|:---|:---|
| 来源           | 产生告警的集群名称。          |
| 服务名          | 产生告警的服务名称。          |
| 角色名          | 产生告警的角色名称。          |
| 主机名          | 产生告警的主机名。           |
| NameService名 | 产生告警的NameService名称。 |
   
#### 对系统的影响
如果主NameNode数据目录的FsImage没有更新，则说明HDFS元数据合并功能异常，需要修复。如不修复，HDFS在运行一段时间后，Editlog会一直增长。此时如果重启HDFS，由于要加载非常多的Editlog，会导致启动非常耗时。另外，该告警的产生也说明备NameNode功能异常，导致NameNode的HA机制失效。一旦主NameNode故障，则整个HDFS服务将不可用。
#### 可能原因
- 备NameNode被停止。
- 备NameNode实例运行状态异常。
- 备NameNode合并新的FsImage失败。
- 备NameNode数据目录空间不足。
- 备NameNode推送FsImage到主NameNode失败。
- 主NameNode数据目录空间不足。
 
#### 处理步骤
**查看备NameNode是否被停止。**
1. 在FusionInsight Manager首页，选择"运维 \> 告警 \> 告警"，在告警列表中单击此告警。
2. 在告警详情区域，查看"定位信息"，获取告警产生的主NameNode的主机名和所在的NameService名称。
3. 选择"集群 \> 服务 \> HDFS \> 实例"，在实例列表中找到该NameService的备NameNode实例，查看其"配置状态"是否为"已同步"。 
   - 是，执行[步骤 6]。
   
   - 否，执行[步骤 4]。
   
   
   
   
4. 勾选该备NameNode实例，单击"启动实例"，等待启动完成。
5. 等待1个NameNode合并元数据的周期时间后，查看告警是否清除。 
   - 是，处理完毕。
   
   - 否，执行[步骤 6]。
   
   
   
   
**查看备NameNode实例运行状态是否正常。**
6. 查看该备NameNode实例的"运行状态"是否为"良好"。
   
   - 是，执行[步骤 9]。
   
   - 否，执行[步骤 7]。
   
   
   
   
7. 勾选该备NameNode实例，单击"更多 \> 重启实例"，等待启动完成。
   
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   重启备NameNode业务不受影响。
   
   
8. 启动完成后，等待1个NameNode合并元数据的周期时间，然后查看告警是否清除。 
   - 是，处理完毕。
   
   - 否，执行[步骤 30]。
   
   
   
   
**备NameNode合并新的FsImage是否失败。**
9. 在FusionInsight Manager首页，选择"集群 \> 服务 \> HDFS \> 配置 \> 全部配置"，搜索并获取"dfs.namenode.checkpoint.period"的值，该值即为NameNode合并元数据的周期。
10. 选择"集群 \> 服务 \> HDFS \> 实例"，获取产生该告警的NameService的主、备NameNode节点的业务IP地址。
11. 单击"NameNode(*xx*,备)"，单击"实例配置"，获取配置项"dfs.namenode.name.dir"的值，该值即为备NameNode的FsImage存储目录。
12. 以**root** 登录备NameNode节点，用户密码为安装前用户自定义，请咨询系统管理员。
    
    集群节点登录可参考[登录MRS集群节点](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0083.html)。
    执行以下命令切换到**omm**用户。
    ```
    su - omm
    ```
    
    
13. 进入到FsImage存储目录，查看最新的FsImage的生成时间。 
    ```
    cd 备NameNode存储目录/current
    ```
    ```
    stat -c %y $(ls -t | grep "fsimage_[0-9]*$" | head -1)
    ```
    
    
14. 执行以下命令获取系统当前时间。 
    ```
    date
    ```
    
    
15. 计算最新FsImage的生成时间和当前时间的时间差，判断该时间差是否大于元数据合并周期（"dfs.namenode.checkpoint.period"）的三倍。 
    - 是，执行[步骤 16]。
    
    - 否，执行[步骤 20]。
    
    
    
    
16. 备NameNode合并元数据的功能异常。执行以下命令查看是否为存储空间不足造成。
    
    进入到FsImage存储目录。
    ```
    cd 备NameNode存储目录/current
    ```
    查看最近一个的FsImage的大小（单位为MB）。
    ```
    du -m $(ls -t | grep "fsimage_[0-9]*$" | head -1) | awk '{print $1}'
    ```
    
    
17. 执行命令查看备NameNode的磁盘剩余空间（单位为MB）。 
    ```
    df -m ./ | awk 'END{print $4}'
    ```
    
    
18. 对比FsImage的大小和目录剩余空间大小，确认剩余空间是否还能存储一个FsImage文件。 
    - 是，执行[步骤 7]。
    
    - 否，执行[步骤 19]。
    
    
    
    
19. 清理该目录所在磁盘的冗余文件，以便给元数据存放预留足够的空间。空间清理完毕后等待1个NameNode合并元数据的周期时间，查看告警是否清除。
    
    - 是，处理完毕。
    
    - 否，执行[步骤 20]。
    
    
    
    
**查看备NameNode推送FsImage到主NameNode是否失败。**
20. 以**root**用户登录备NameNode节点，用户密码为安装前用户自定义，请咨询系统管理员。
21. 执行命令切换到**omm** 用户。
    
    ```
    su - omm
    ```
    
    
22. 使用如下命令查看备NameNode是否能将文件推送到主NameNode上。 
    ```
    tmpFile=/tmp/tmp_test_$(date +%s)
    ```
    ```
    echo "test" > $tmpFile
    ```
    ```
    scp $tmpFile 主NameNode节点的IP地址:/tmp
    ```
    - 是，执行[步骤 24]。
    
    - 否，执行[步骤 23]。
    
    
    
    
23. 联系MRS集群管理员，处理在**omm** 用户下备NameNode无法推送数据到主NameNode的原因。故障恢复后等待1个NameNode合并元数据的周期时间，查看告警是否清除。
    
    - 是，处理完毕。
    
    - 否，执行[步骤 24]。
    
    
    
    
**查看主NameNode数据目录空间是否不足。**
24. 在FusionInsight Manager首页，选择"集群 \> *待操作集群的名称* \> 服务 \> HDFS \> 实例"，单击产生告警的NameService的主NameNode，单击"实例配置"，获取配置项"dfs.namenode.name.dir"的值，该值即为主NameNode的FsImage存储目录。
25. 以**root** 或**omm**用户登录主NameNode节点。
26. 进入到FsImage存储目录，查看最近一个的FsImage的大小（单位为MB）。 
    ```
    cd 主NameNode存储目录/current
    ```
    ```
    du -m $(ls -t | grep "fsimage_[0-9]*$" | head -1) | awk '{print $1}'
    ```
    
    
27. 执行如下命令查看主NameNode的磁盘剩余空间（单位为MB）。 
    ```
    df -m ./ | awk 'END{print $4}'
    ```
    
    
28. 对比FsImage的大小和目录剩余空间大小，看剩余空间是否还能存储一个FsImage文件。 
    - 是，执行[步骤 30]。
    
    - 否，执行[步骤 29]。
    
    
    
    
29. 清理该目录所在磁盘的冗余文件，以便给元数据存放预留足够的空间。空间清理完毕后等待1个NameNode合并元数据的周期时间，查看告警是否清除。
    
    - 是，处理完毕。
    
    - 否，执行[步骤 30]。
    
    
    
    
**收集故障信息。**
30. 在FusionInsight Manager首页，选择"运维 \> 日志 \> 下载"。
31. 在"服务"中勾选待操作集群的"NameNode"。
32. 单击右上角的![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0263895680.png)设置日志收集的"开始时间"和"结束时间"分别为告警产生时间的前后30分钟，单击"下载"。
33. 请联系运维人员，并发送已收集的故障日志信息。
 
#### 告警清除
此告警修复后，系统会自动清除此告警，无需手工清除。
#### 参考信息
无。
