场景:hbase hbck 命令返回 Azure HDInsight 中不一致的结果

本文介绍在与 Azure HDInsight 群集交互时出现的问题的故障排除步骤和可能的解决方法。 如果使用 hbase-2.x,请参阅如何使用 Apache HBase HBCK2 工具

问题:区域不在 hbase:meta

区域 xxx 位于 HDFS 上,但未在 hbase:meta 中列出,或未在任何区域服务器上部署。

原因

多种多样。

解决方法

  1. 运行以下命令修复元表:

    hbase hbck -ignorePreCheckPermission -fixMeta
    
  2. 运行以下命令将区域分配到 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 文件系统,某些文件操作不是原子性的。

解决方法

手动清理这些剩余文件和文件夹:

  1. 执行 hdfs dfs -ls /hbase/data/default/tablex/regiony 检查其中仍然包含哪些文件夹/文件。

  2. 执行 hdfs dfs -rmr /hbase/data/default/tablex/regiony/filez 删除所有子文件/文件夹。

  3. 执行 hdfs dfs -rmr /hbase/data/default/tablex/regiony 删除区域文件夹。


后续步骤

如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。 有关更多详细信息,请参阅如何创建 Azure 支持请求。 Azure 订阅包含对订阅管理和计费支持的访问权限,并且通过 Azure 支持计划之一提供技术支持。