但行好事
莫论前程❤

Hbase 文件检测修复工具hbck

hbck 工具用于HBase底层文件 系统 的 检测 和修复,是非常常用的一个工具。hbck可以检测 Master、RegionServer内存中的状态以及HDFS 上面数据的状态之间的一致性、黑洞问题,定位 元数据的不一致问题,并且具有多种修复方式。

注意:
hbase hbck命令的执行条件要求所有的节点都要启动.
hbase org.apache.hadoop.hbase.util.OfflineMetaRepair 重新分配元数据表可以离线状态执行,即关闭hbase集群

常规 选项 如下: ·

  • -help: 显示 帮助 选项。
  • -details: 显示 所有 Region 的 完整 报告。
  • -timelag: 只 检测 最近 秒 内 没有 元 数据 更新 的 Region。
  • -sleepBeforeRerun: 检测 之前 先 停顿 一段时间, 单位 是 秒。
  • -summary: 输出 表 和 状态 的 总结 信息。
  • -metaonly: 只 检测- ROOT- 和. META. 表 的 状态。
  • -sidelineDir: 备份 现有- ROOT- 和. META. 表 到 指定 的 HDFS 路径。

所有的修复参数选项如下:

  • -fix: 向下 兼容 用, 被- fixAssignments替代。
  • -fixAssignments: 用于修复Region分配错误。
  • -fixMeta: 用于修复.META.表的问题,前提是HDFS上面的Region信息有并且正确。
  • -fixHdfsHoles: 修复Region Holes(空洞,即某个区间没有Region)问题。
  • -fixHdfsOrphans: 修复Orphan Region(HDFS上面没有.regioninfo的Region)。
  • -fixHdfsOverlaps: 修复Region Overlaps(区间重叠)
  • -fixVersionFile: 修复缺失hbase. version文件的问题。
  • -maxMerge( n 默认 是 5):当Region有重叠时,需要合并Region,一次合并的Region数最大不超过这个 值。
  • -sidelineBigOverlaps:当修复Region Overlaps 问题时, 允许跟其他Region重叠次数最多的一些 Region 不 参与(修复 后, 可以把没有参与的数据通过bulkload 加载到相应 的Region)。
  • -maxOverlapsToSideline( n 默认 是 2): 当 修复 Region Overlaps 问题 时, 一组 里 最多 允许 多少 个 Region 不 参与。

快捷修复元数据的选项如下:

  • -repair: 相当于- fixAssignments- fixMeta- fixHdfsHoles- fixHdfsOrphans- fixHdfsOverlaps- fixVersionFile- sidelineBigOverlaps。
  • -repairHoles: 相当于- fixAssignments- fixMeta- fixHdfsHoles- fixHdfsOrphans。

定位不一致

要 检查 HBase 集群 是否 有 文件 损坏, 运行 hbck 获取 的 输出 信息 如下:

bash- 3. 2$ hbase hbck .... Summary: -ROOT- is okay. Number of regions: 1 Deployed on: node- 128- 91, 60020, 1386228733111 .META. is okay.
Number of regions: 1 
Deployed on: node- 128- 91, 60020, 1386228733111 message_ user is okay. 
Number of regions: 4
Deployed on: node- 128- 91, 60020, 1386228733111 node- 128- 92, 60020, 1386228734948 node- 128- 93, 60020, 1386228753027 message_ visitor is okay. 
Number of regions: 1 
Deployed on: node- 128- 91, 60020, 1386228733111 movie_ fav_ user_ list is okay.
Number of regions: 1 
Deployed on: node- 128- 93, 60020, 1386228753027 movie_ fav_ visitor_ list is okay.
Number of regions: 1 
Deployed on: node- 128- 91, 60020, 1386228733111 test is okay. 
Number of regions: 1 
Deployed on: node- 128- 92, 60020, 1386228734948 user is okay.
Number of regions: 1 
Deployed on: node- 128- 93, 60020, 1386228753027 user_ behavior_ attribute is okay. 
Number of regions: 1
Deployed on: node- 128- 92, 60020, 1386228734948 user_ behavior_ attribute_ noregistered is okay. 
Number of regions: 1
Deployed on: node- 128- 93, 60020, 1386228753027

0 inconsistencies detected. 
Status: OK

命令输出结束的地方,会输出OK或显示多少损坏情况出现.但是因为一些损坏可能是暂时的(如集群正启动或区域 正分裂),可以多次运行 hbck 命令。从运维角度来说,可以有规律运行hbck并在反复报告不一致性时设置报警( 使用Nagios)。

还可以添加-details参数查看检测的详细信息,命令如下:

 $ hbase hbck -details

快速修复元数据损坏

​ 使用快速修复元数据选项是解决不一致性问题风险最低的一种方法。其包含Region一致性修复——定位单个 Region修复,修改内训数据、ZooKeeper数据和.META.表空洞。Region一致性需要Region在HDFS的状态信息、 Region在.META.中数据、Region部署/分配信息以及Master相关信息等维度共同决定。快速修复的命令有两个, 下面代码是命令的使用方式,详细了解请参考上面的命令解释部分。

hbase hbck -repair
hbase hbck -repairHoles

修复Region叠加

​ 表的完整性问题可能涉及修复Region的叠加。该操作的风险系数比较高,因为其涉及修改文件系统。在使用 该项相关命令之前需要严谨评估对风险的承受力。使用该命令之前首先应该使用hbase hbck- details 命令定位尝试修复的数据位置。然后,执行修复Region叠加的命令,命令如下所示:

hbase hbck  -fixHdfsOrphans
hbase hbck  -fixHdfsOverlaps

修改文件系统有两个方法:合并Region到一个更大的Region;对于边线的Region将其移动到“边线”目录,稍后重新存储这部分数据。合并成更大的Region会导致合并和分裂操作,对CPU和I/O资源的消耗很大。对于这种情况, 边线方式具有不少优势。下面的选项会从某种程度上保护Region叠加操作,降低该操作带来的风险。

  • -maxMerge
  • -sidelineBigOverlaps
  • -maxOverlapsToSideline

这些参数的使用方法如下:

$ hbase hbck -fixHdfsOverlaps -maxMerge 3 
$ hbase hbck -fixHdfsOverlaps -sidelineBigOverlaps 
$ hbase hbck -fixHdfsOverlaps -maxOverlapsToSideline 4

.META.没有正确分配

如果.META. 表的Region存在分配和部署的一致性问题,可以使用特殊的-fixMetaOnly参数尝试修复分配,命令的使用方式如下:

hbase hbck -fixMetaOnly -fixAssignments

版本文件丢失

HBase文件系统启动的时候,其数据需要一个版本文件(hbase.version)。如果该版本文件丢失,可以使用下面的命令修复:

hbase hbck -fixMetaOnly -fixVersionFile

-ROOT-和.META.表损坏

最严重的损坏场景是-ROOT-或.META.表损坏,HBase将会启动失败。这种情况可以使用OfflineMetaRepair工具 创建新的-ROOT-和.META.表。该工具假设HBase是offline的,找到HBase在HDFS的主目录,加载Region的元数据文件的信息,然后重新创建新的-ROOT-和.META.表数据。其命令的使用方式如下:

hbase org.apache.hadoop.hbase.util.OfflineMetaRepair
赞(0) 打赏
未经允许不得转载:刘鹏博客 » Hbase 文件检测修复工具hbck
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏