
# ALM-19036 HBase关键目录数据存在坏块
#### 告警解释
系统每5分钟周期性检测HBase服务的关键目录是否存在坏块，当检测到存在坏块时产生该告警。检查内容包括"hbase.version"文件、**hbase:meta** 和**master:store**表目录。
当系统检测到HBase服务的关键目录都不存在坏块时，告警清除。
本章节仅适用于MRS 3.5.0-LTS及之后版本。
#### 告警属性
| 告警ID  | 告警级别 | 是否可自动清除 |
|:---|:---|:---|
| 19036 | 紧急   | 是       |
   
#### 告警参数
| 类别   | 参数名称 | 参数含义       |
|:---|:---|:---|
| 定位信息 | 来源   | 产生告警的集群名称。 |
| 定位信息 | 服务名  | 产生告警的服务名称。 |
| 定位信息 | 角色名  | 产生告警的角色名称。 |
| 定位信息 | 主机名  | 产生告警的主机名。  |
   
#### 对系统的影响
HBase关键目录丢块，会导致HBase服务不可用，造成业务请求积压或中断。
#### 可能原因
HDFS故障导致HBase关键目录丢块。
#### 处理步骤
![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/notice_3.0-zh-cn.png)
关键目录数据存在坏块的处理步骤，涉及停止HBase服务等用于快速恢复HBase服务的操作，会导致业务中断，请谨慎操作，同时需要关注业务侧数据积压问题。
**查看HDFS服务是否正常。**
1. 登录FusionInsight Manager，选择"集群 \> 服务 \> HDFS"，查看"运行状态"是否为"良好"。 
   - 是，执行[步骤 3]。
   
   - 否，执行[步骤 2]。
   
   
   
   
2. 根据HDFS上报告警的相关帮助文档恢复HDFS服务的运行状态为"良好"，执行[步骤 3]。
**重建关键目录数据**。
3. 在FusionInsight Manager首页，选择"运维 \> 告警 \> 告警"，查看"告警ID"为"19036"告警的"告警原因"，确认丢块的目录。
4. 根据丢块的目录执行相应恢复操作： 
   - "告警原因"为"hbase.version文件存在坏块。"，执行[步骤 5]恢复"hbase.version"文件。
   
   - "告警原因"为"hbase:meta表目录存在坏块。"，执行[步骤 6]恢复hbase meta表目录文件。
   
   - "告警原因"为"master:store表目录存在坏块。"，执行[步骤 7]恢复master store表目录文件。
   
   
   
   
5. 恢复"hbase.version"文件。
   
   1. 以客户端安装用户，登录安装了客户端的节点。
   
   2. 执行以下命令切换到客户端安装目录。 **cd** *客户端安装目录*
      
   
   3. 执行以下命令配置环境变量。 **source bigdata_env**
      **source HBase/component_env**
      
   
   4. 如果集群已启用Kerberos认证（安全模式），执行以下命令以HBase内置用户进行认证，如果是首次认证，需要输入默认密码，并修改密码： **kinit** **hbase**
      如果集群未启用Kerberos认证（普通模式），则执行以下命令设置Hadoop用户名：
      **export HADOOP_USER_NAME=hbase**
      
   
   5. 执行以下命令创建一个HDFS中不存在的备份目录，例如"/tmp/hbase_bak"： **hdfs dfs -mkdir** */tmp/hbase_bak*
      
   
   6. 执行以下命令备份旧文件： **hdfs dfs -mv /hbase/hbase.version** */tmp/hbase_bak*
      
   
   7. 执行**hbck** 命令，修复"hbase.version"文件：
      **hbase hbck -j** **${HBASE_HOME}/tools/hbase-hbck2-\*.jar filesystem -fixVersionFile**
      - 命令执行成功后，可执行以下命令查看恢复的"hbase.version"文件： **hdfs dfs -ls /hbase**
        
      
      - 如果该命令执行失败，则执行[步骤 8]。
       
   
   8. 登录FusionInsight Manager界面，选择"集群 \> 服务 \> HBase \> 实例"，勾选所有HMaster实例，选择"更多 \> 滚动重启实例"，输入当前用户密码并单击"确定"，滚动重启所有HMaster实例。
   
   9. HMaster实例重启成功后，在告警列表中查看该告警是否清除。
      - 是，处理完毕。
      
      - 否，执行[步骤 8]。
       
   
   
   
   
6. 恢复hbase meta表目录文件。
   
   1. 登录FusionInsight Manager界面，选择"集群 \> 服务 \> HBase"，单击概览页面右上角的"停止服务"，输入当前用户密码并单击"确定"，停止HBase服务。
   
   2. 以客户端安装用户，登录安装了客户端的节点。
   
   3. 执行以下命令切换到客户端安装目录。 **cd** *客户端安装目录*
      
   
   4. 执行以下命令配置环境变量。 **source bigdata_env**
      **source HBase/component_env**
      
   
   5. 如果集群已启用Kerberos认证（安全模式），执行以下命令以HBase内置用户进行认证，如果是首次认证，需要输入默认密码，并修改密码： **kinit** **hbase**
      如果集群未启用Kerberos认证（普通模式），则执行以下命令设置Hadoop用户名：
      **export HADOOP_USER_NAME=hbase**
      
   
   6. 执行以下命令，重新生成meta表数据： **export HBASE_CLASSPATH=${HBASE_CLASSPATH}:** **${HBASE_HOME}** **/tools/\***
      **hbase org.apache.hbase.hbck1.OfflineMetaRepair -details**
      命令执行后，打印"Success"表示执行成功，继续执行[6.g]；如果命令执行失败，需执行[步骤 8]。
      
   
   7. 执行以下命令创建一个HDFS中不存在的备份目录，例如"/tmp/hbase_bak"：
      **hdfs dfs -mkdir** */tmp/hbase_bak*
      
   
   8. 执行以下命令，备份并清理HMaster相关数据： **hdfs dfs -mv /hbase/MasterData/\*** */tmp/hbase_bak*
      
   
   9. 执行以下命令，清理meta表位置信息： **hbase zkcli**
      **deleteall /hbase/meta-region-server**
      **quit**
      
   
   10. 登录FusionInsight Manager界面，选择"集群 \> 服务 \> HBase"，单击概览页面右上角的" 启动服务"启动HBase服务。
   
   11. HBase服务启动成功后，在告警列表中查看该告警是否清除。
       - 是，处理完毕。
       
       - 否，执行[步骤 8]。
        
   
   
   
   
7. 恢复master store表目录文件。
   
   1. 登录FusionInsight Manager界面，选择"集群 \> 服务 \> HBase"，单击概览页面右上角的"停止服务"，输入当前用户密码单击"确定"，停止HBase服务。
   
   2. 以客户端安装用户，登录安装了客户端的节点。
   
   3. 执行以下命令切换到客户端安装目录。 **cd** *客户端安装目录*
      
   
   4. 执行以下命令配置环境变量。 **source bigdata_env**
      **source HBase/component_env**
      
   
   5. 如果集群已启用Kerberos认证（安全模式），执行以下命令以HBase内置用户进行认证，如果是首次认证，需要输入默认密码，并修改密码： **kinit** **hbase**
      如果集群未启用Kerberos认证（普通模式），则执行以下命令设置Hadoop用户名：
      **export HADOOP_USER_NAME=hbase**
      
   
   6. 执行以下命令创建一个HDFS中不存在的备份目录，例如"/tmp/hbase_bak"： **hdfs dfs -mkdir** */tmp/hbase_bak*
      
   
   7. 执行以下命令，备份并清理HMaster相关数据： **hdfs dfs -mv /hbase/MasterData/\*** */tmp/hbase_bak*
      
   
   8. 执行以下命令，清理meta表位置信息： **hbase zkcli**
      **deleteall /hbase/meta-region-server**
      **quit**
      
   
   9. 登录FusionInsight Manager界面，选择"集群 \> 服务 \> HBase"，单击概览页面右上角的" 启动服务"启动HBase服务。
   
   10. HBase服务启动成功后，在告警列表中查看该告警是否清除。
       - 是，处理完毕。
       
       - 否，执行[步骤 8]。
        
   
   
   
   
![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
使用对应步骤恢复HBase服务后，需要观察一段时间，确认HBase服务以及相关业务正常后，建议执行以下命令删除相关备份目录，避免残留存在坏快的无用文件：
**hdfs dfs -rm -r** */tmp/hbase_bak*
**收集故障信息**
8. 在FusionInsight Manager界面，选择"运维 \> 日志 \> 下载"。
9. 在"服务"中勾选待操作集群的"HBase"。
10. 单击右上角的时间编辑按钮，设置日志收集的"开始时间"和"结束时间"分别为告警产生时间的前后30分钟，单击"下载"。
11. 请联系运维人员，并发送已收集的故障日志信息。
 
#### 告警清除
此告警修复后，系统会自动清除此告警，无需手工清除。
#### 参考信息
不涉及。
