场景:hbase hbck
命令返回 Azure HDInsight 中不一致的结果
本文介绍在与 Azure HDInsight 群集交互时出现的问题的故障排除步骤和可能的解决方法。 如果使用 hbase-2.x,请参阅如何使用 Apache HBase HBCK2 工具
问题:区域不在 hbase:meta
中
区域 xxx 位于 HDFS 上,但未在 hbase:meta
中列出,或未在任何区域服务器上部署。
原因
多种多样。
解决方法
运行以下命令修复元表:
hbase hbck -ignorePreCheckPermission -fixMeta
运行以下命令将区域分配到 RegionServer:
hbase hbck -ignorePreCheckPermission -fixAssignment
问题:区域已脱机
区域 xxx 未部署在任何 RegionServer 上。 这意味着区域在 hbase:meta
中,但已脱机。
原因
多种多样。
解决方法
运行以下命令,使区域联机:
hbase hbck -ignorePreCheckPermission -fixAssignment
或者,在 hbase-shell 上运行 assign <region-hash>
以强制分配此区域
问题:区域具有相同的开始/结束键
原因
多种多样。
解决方法
手动合并这些重叠的区域。 转到 HBase HMaster Web UI 表部分,选择有问题的表链接。 可看到属于该表的每个区域的开始键/结束键。 然后合并这些重叠的区域。 在 HBase shell 中执行 merge_region 'xxxxxxxx','yyyyyyy', true
。 例如:
RegionA, startkey:001, endkey:010,
RegionB, startkey:001, endkey:080,
RegionC, startkey:010, endkey:080.
在这种情况下,需要合并 RegionA 和 RegionC,获取键范围与 RegionB 相同的 RegionD,然后合并 RegionB 和 RegionD。 xxxxxxx 和 yyyyyy 是每个区域名称末尾的哈希字符串。 此处请注意,不要合并两个非连续区域。 每次合并后(例如,合并 A 和 C),HBase 将在 RegionD 上启动压缩。 等待压缩完成,然后与 RegionD 进行另一次合并。 可以在 HBase HMaster UI 中该区域服务器的页面上找到压缩状态。
问题:无法加载 .regioninfo
无法加载区域 /hbase/data/default/tablex/regiony
的 .regioninfo
。
原因
原因很可能是 RegionServer 崩溃或 VM 重新启动时部分删除了区域。 目前,Azure 存储是一个平面 Blob 文件系统,某些文件操作不是原子性的。
解决方法
手动清理这些剩余文件和文件夹:
执行
hdfs dfs -ls /hbase/data/default/tablex/regiony
检查其中仍然包含哪些文件夹/文件。执行
hdfs dfs -rmr /hbase/data/default/tablex/regiony/filez
删除所有子文件/文件夹。执行
hdfs dfs -rmr /hbase/data/default/tablex/regiony
删除区域文件夹。
后续步骤
如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:
- 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。 有关更多详细信息,请参阅如何创建 Azure 支持请求。 Azure 订阅包含对订阅管理和计费支持的访问权限,并且通过 Azure 支持计划之一提供技术支持。