hbase hbck深入

官网介绍:http://hbase.apache.org/book.html#hbck.in.depth

hbck深入

HBaseFsck(hbck)是一个用于检查区域一致性和表完整性问题并修复损坏的HBase的工具。它工作在两种基本模式 - 只读不一致识别模式和多阶段读写修复模式。

C.1。运行hbck来识别不一致

要检查您的HBase集群是否损坏,请针对您的HBase集群运行hbck:

$ ./bin/hbase hbck

在命令输出结束时,它会打印OK或告诉您存在的INCONSISTENCIES数量。您可能还想运行hbck几次,因为一些不一致可能是暂时的(例如,群集正在启动或区域正在分裂)。在操作上,您可能希望定期运行hbck并在其重复报告不一致时设置警报(例如通过nagios)。一连串的hbck将报告不一致的列表以及受影响的区域和表格的简要描述。使用该-details选项将报告更多细节,包括所有表格中所有分割的代表性列表。

$ ./bin/hbase hbck -details

如果您只想知道某些表是否已损坏,则可以限制hbck以仅在特定表中标识不一致。例如,以下命令只会尝试检查表TableFoo和TableBar。好处是hbck运行时间更短。

$ ./bin/hbase hbck TableFoo TableBar

C.2。不一致性

如果经过多次运行,不一致仍会继续报告,您可能会遇到腐败现象。这些应该是罕见的,但是如果它们发生在较新版本的HBase中,则包括启用了自动修复选项的hbck工具。

有两个不变式在违反HBase时会产生不一致:

  • 如果每个区域都被分配和部署在一个区域服务器上,并且这个状态保存的所有地方都是一致的,那么HBase的区域一致性不变是满足的。

  • 如果对于每个表,每个可能的行键只解析为一个区域,HBase的表完整性不变是满足的。

修复通常分三个阶段进行:识别不一致的只读信息收集阶段,恢复表完整性不变的表完整性修复阶段,以及最后恢复区域一致性不变的区域一致性修复阶段。从版本0.90.0开始,hbck可以检测关于可能的表完整性问题的子集的区域一致性问题报告。它还包括自动修复最常见的不一致性,区域分配和部署一致性问题的能力。此修复可以通过使用-fix命令行选项完成。如果这些问题在错误的服务器或多个区域服务器上打开,则这些问题会关闭区域,并且如果区域服务器未打开,也会将区域分配给区域服务器

从HBase版本0.90.7,0.92.2和0.94.0开始,引入了几个新的命令行选项来帮助修复损坏的HBase。这个hbck有时会被昵称“uberhbck”取代。每个特定版本的uber hbck都与相同主版本的HBase兼容(0.90.7 uberhbck可以修复0.90.4)。但是,版本.90.90.6和版本⇐0.92.1可能需要重新启动主节点或故障转移到备份主节点。

C.3。本地化维修

修复损坏的HBase时,最好先修复最低风险的不一致。这些通常是区域一致性修复 - 局部单一区域修复,它只修改内存数据,临时动物园管理员数据或META表中的修补程序漏洞。区域一致性要求HBase实例具有HDFS(.regioninfo文件)中区域数据的状态,hbase:meta表中的区域行,以及区域服务器和主区域上的区域部署/分配。修复区域一致性的选项包括:

  • -fixAssignments(相当于0.90 -fix选项)可修复未分配,错误分配或乘数分配的区域。

  • -fixMeta当HDFS中不存在相应的区域时删除元行,并且如果它们的区域存在于HDFS中而不在META中则添加新的元行。要修复部署和分配问题,您可以运行以下命令:

$ ./bin/hbase hbck -fixAssignments

要修复部署和分配问题以及修复不正确的元行,您可以运行以下命令:

$ ./bin/hbase hbck -fixAssignments -fixMeta

有几类表完整性问题是低风险修复。前两个是简并(startkey == endkey)区域和向后区域(startkey> endkey)。这些通过将数据旁路到临时目录(/ hbck / xxxx)来自动处理。第三个低风险类是hdfs地区漏洞。这可以通过使用以下来修复:

  • -fixHdfsHoles选项用于在文件系统上制作新的空白区域。如果检测到漏洞,则可以使用-fixHdfsHoles,并应包含-fixMeta和-fixAssignments以使新区域保持一致。

$ ./bin/hbase hbck -fixAssignments -fixMeta -fixHdfsHoles

由于这是一种常见操作,因此我们添加了一个-repairHoles与上一个命令等效标志:

$ ./bin/hbase hbck -repairHoles

如果这些步骤之后仍然存在不一致问题,则很可能出现与孤立或重叠区域相关的表完整性问题。

C.4。地区重叠修理

表完整性问题可能需要处理重叠的修复。这是一项风险较大的操作,因为它需要修改文件系统,需要做出一些决策,并且可能需要一些手动步骤。对于这些修理,最好分析一次hbck -details 运行的输出,以便在检查发现问题时仅隔离维修尝试。因为这是更危险的,所以应该使用保护来限制维修的范围。警告:这是一个相对较新的版本,只在线上测试过,但闲置的HBase实例(没有读/写)。在积极的生产环境中使用您自己的风险!修复表完整性违规的选项包括:

  • -fixHdfsOrphans 选择“采用”缺少区域元数据文件(.regioninfo文件)的区域目录。

  • -fixHdfsOverlaps固定重叠区域的能力

在修复重叠区域时,可以通过两种方式在文件系统上修改区域的数据:1)通过将区域合并到更大的区域中或2)通过将数据移动到稍后可以恢复数据的“sideline”目录的旁路区域。合并大量区域在技术上是正确的,但可能导致需要一系列昂贵的压缩和分裂操作的非常大的区域。在这些情况下,最好将与其他大多数地区(可能是最大范围)重叠的地区划分开来,以便合并可以在更合理的范围内进行。由于这些边界区域已经布局在HBase的本地目录和HFile格式中,因此可以使用HBase的批量加载机制进行恢复。默认的保障阈值是保守的。

  • -maxMerge  最大数量的重叠区域要合并

  • -sidelineBigOverlaps 如果超过maxMerge区域重叠,副业尝试旁路与其他大多数区域重叠的区域。

  • -maxOverlapsToSideline  如果大面积重叠的地区,副业最多n个地区。

由于您经常只想修复表格,因此您可以使用此选项打开所有修复选项:

  • -repair 包括所有区域一致性选项以及只有孔修复表完整性选项。

最后,还有一些保护措施可以限制对特定表格的修复。例如,以下命令只会尝试检查并修复表格TableFoo和TableBar。

$ ./bin/hbase hbck -repair TableFoo TableBar

C.4.1。特殊情况:Meta未正确分配

有一些hbck可以处理的特殊情况。有时,元表唯一的区域不一致地分配或部署。在这种情况下,有一个特殊-fixMetaOnly选项可以尝试修复元分配。

$ ./bin/hbase hbck -fixMetaOnly -fixAssignments

C.4.2。特殊情况:HBase版本文件丢失

HBase的文件系统数据需要一个版本文件才能启动。如果缺少这个文件,您可以使用该-fixVersionFile选项来制作新的HBase版本文件。这假设您正在运行的hbck版本是适用于HBase集群的版本。

C.4.3。特例:Root和META已损坏。

最严重的腐败情况是ROOT或META损坏且HBase无法启动的情况。在这种情况下,您可以使用OfflineMetaRepair工具创建新的ROOT和META区域和表格。该工具假定HBase处于离线状态。然后通过现有的HBase主目录进行游览,从文件系统尽可能多地从区域元数据文件(.regioninfo文件)中加载信息。如果区域元数据具有适当的表完整性,则会旁路原始根目录和元目录表目录,并使用指向区域目录及其数据的指针构建新的目录。

$ ./bin/hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
这个工具不像uberhbck那样聪明,但可以用来引导uberhbck可以完成的修复。如果工具成功,您应该能够启动hbase并在必要时运行联机修复。

C.4.4。特殊情况:离线分离父母

一旦区域被拆分,离线父母将自动清理。有时,女儿地区在父母清理之前会再次分裂。HBase可以按照正确的顺序清理父母。但是,有时候可能会有一些徘徊在离线分裂的父母身上。他们在META中,在HDFS中,没有部署。但是HBase无法清理它们。在这种情况下,您可以使用该-fixSplitParents选项在META中重置它们以联机并且不拆分。因此,如果使用修复重叠区域选项,hbck可以将它们与其他区域合并。

这个选项通常不应该被使用,并且它不在-fixAll


你可能感兴趣的:(Hbase)