
# 文件块过大导致HBase数据导入失败
#### 问题现象
导入数据到hbase报错：NotServingRegionException。
#### 原因分析
当一个block size大于2G时，hdfs在seek的时候会出现读取异常，持续频繁写入regionserver时出现了full gc，且时间比较久，导致hmaster与regionserver之间的心跳异常，然后hmaster把regionserver标记为dead状态，强制重启了Regionserver，重启后触发servercrash机制开始回滚wal日志。现在这个splitwal的文件已经达到将近2.1G，且其仅有一个block块，导致hdfs seek异常，引起splitwal失败，regionserver检测到当前这个wal日志还需要split，又会触发splitwal日志的机制进行回滚，就这样在split与split失败之间不停循环，导致无法上线该regionserver节点上的region，最后出现查询该RS上某一个region时会报region not online的异常。
#### 处理步骤
1. 进入HBase服务页面： 
   - MRS 3.*x* 之前版本，单击集群名称，登录集群详情页面，选择"组件管理 \> HBase"。
     ![](https://support.huaweicloud.com/trouble-mrs/public_sys-resources/note_3.0-zh-cn.png)
     如果集群详情页面没有"组件管理"页签，请先完成IAM用户同步（在集群详情页的"概览"页签，单击"IAM用户同步"右侧的"同步"进行IAM用户同步）。
     
   
   - MRS 3.x及后续版本，登录FusionInsight Manager。然后选择"集群 \> *待操作的集群名*称 \> 服务 \> HBase"。
   
   
   
   
2. 在"HMaster Web UI"右侧，单击"HMaster (主)"进入HBase Web UI界面。
3. 在"Procedures"页签查看问题节点。
4. 以root用户登录问题节并执行hdfs dfs -ls命令查看所有块信息。
5. 执行hdfs dfs -mkdir命令新建目录用于存放问题块。
6. 执行hdfs dfs -mv将问题块转移至新建目录位置。
 
#### 建议与总结
以下两点可供参考：
- 数据块损坏，通过hdfs fsck /tmp -files -blocks -racks命令检查block数据块健康信息。
- region正在分裂时对数据的操作会抛NotServingRegionException异常。
 
