更新时间:2024-05-28 GMT+08:00
文件块过大导致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的异常。
处理步骤
- 进入HBase服务页面:
- MRS 3.x之前版本,单击集群名称,登录集群详情页面,选择“组件管理 > HBase”。
如果集群详情页面没有“组件管理”页签,请先完成IAM用户同步(在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“同步”进行IAM用户同步)。
- MRS 3.x及后续版本,登录FusionInsight Manager。然后选择“集群 > 待操作的集群名称 > 服务 > HBase”。
- MRS 3.x之前版本,单击集群名称,登录集群详情页面,选择“组件管理 > HBase”。
- 在“HMaster Web UI”右侧,单击“HMaster (主)”进入HBase Web UI界面。
- 在“Procedures”页签查看问题节点。
- 以root用户登录问题节并执行hdfs dfs -ls命令查看所有块信息。
- 执行hdfs dfs -mkdir命令新建目录用于存放问题块。
- 执行hdfs dfs -mv将问题块转移至新建目录位置。
建议与总结
以下两点可供参考:
- 数据块损坏,通过hdfs fsck /tmp -files -blocks -racks命令检查block数据块健康信息。
- region正在分裂时对数据的操作会抛NotServingRegionException异常。
父主题: 使用HBase