Hbase Hbck2修复工具介绍和实践

这篇具有很好参考价值的文章主要介绍了Hbase Hbck2修复工具介绍和实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于Hbase hbck 工具网上有很多大佬已经很详细的介绍关于它的获取构建和运行方式.

今天我就结合最近项目中遇到的一些实际的问题来介绍一下在什么问题下怎样使用这个工具去解决!

  1. 构建和运行 hbck2

HBCK2继承自 hbck1,hbck1是 hbase -1.0版本开始附带的修复工具。hbck1不建议运行在 hbase-2.0版本以上的集群 ,它可能会造成一些严重的问题,需使用HBCK2代替 hbck1对 hbase-2.0以上集群进行修复。虽然hbck1仍然捆绑在 hbase-2.0以上的集群中 ,为了尽量减少意外hbck1已被弃用,将在hbase-3.0中删除。hbck1的修复功能 ( -fix) 已被删除,但可以报告 hbase-2.x 集群的状态;hbck1不了解 hbase-2.x 集群内部工作原理,评估的不是很准确。

HBCK2每次运行时都会执行一个独立的任务,但并不影响HBCK2分析正在运行的集群,然后像hbck1那样修复所有问题。HBCK2是用来修复的正在运行的集群中的不一致或堵塞Region。可以查看正在运行的集群 Master 的日志和Web UI,一旦发现问题就可以使用HBCK2工具进行修复或跳过不良状态。必须在HBase Master节点上进行修复,而不是在修复工具的本地进行修复,这是HBCK2和hbck1的另一个重要区别。

HBCK2已经被剥离出HBase成为了一个单独的项目,如果你想要使用这个工具,需要根据自己HBase的版本,编译源码。其GitHub地址为:https://github.com/apache/hbase-operator-tools.git在hbase-operator-tools/pom.xml中将hbase版本换成当前HBase版本,项目根目录下运行打包命令:mvn clean install -DskipTests。打包完成后,是有多个jar包的,将自己需要的hbck2取出来hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.0.0-SNAPSHOT.jar。/etc/hbase-conf是hbase部署的配置所在目录。HBCK2的jar在~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.0.0-SNAPSHOT.jar。上述命令没有传递任何选项或参数将输出HBCK2命令的帮助文档:

usage: HBCK2 [OPTIONS] COMMAND <ARGS>

Options:

-d,--debug run with debug output

-h,--help output this help message

-p,--hbase.zookeeper.property.clientPort <arg> port of hbase ensemble

-q,--hbase.zookeeper.quorum <arg> hbase ensemble

-s,--skip skip hbase version check

(PleaseHoldException)

-v,--version this hbck2 version

-z,--zookeeper.znode.parent <arg> parent znode of hbase

ensemble

  1. HBCK2核心功能介绍

2.1 HBCK2的修复原则

Hbase Hbck2修复工具介绍和实践

2.2 HBCK2命令

hbase hbck -j < jar包地址> <命令>

hbase hbck -j /opt/software/hbase/hbase-hbck2/ hbase-hbck2-1.1.0.jar <命令> <OPTIONs>

2.2.1 场景及使用

Hbase Hbck2修复工具介绍和实践

addFsRegionMissingInMeta

使用说明:

执行命令后,会先去查看.regionInfo文件有但是meta表没有的region信息,然后从hdfs的.regionInfo文件中加载这部分region内容。

生成环境中hbase:meta会因为某些原因丢失一些region的信息,这个时候可以使用hbck2的addFsRegionsMissingInMeta 进行修复,该命令会扫描hdfs中Region目录的region_info的信息并根据该信息进行region重建,最后在运行该命令输出的assign命令进行重新分配。

注意事项:

  1. 在我们使用的HBase2.1.0-cdh6.3.2(≤2.3.0)使用该命令时不会将meta表中新增Region的记录写入HBase Master AMv2中的cache,因此在挂在之前需要滚动重启HBase的Master。

Hbase Hbck2修复工具介绍和实践

extraRegionsInMeta

使用原理:

执行命令后,会读取meta表中的Region信息,与对应HBase在HDFS上的数据目录进行对比,找出meta表中存在但HDFS上不存在的Region。生成环境中,有的时候会遇到表中的region数据已经删除,但是hbase:meta中还有该region的信息,这种情况有可能是split出问题,或者是误操作将hdfs中的region数据给rm或mv了,也有可能是丢块了等等。这个时候可以使用hbck2的extraRegionsInMeta --fix进行修复。

OPTIONS:

  1. -f, --fix fix meta by removing all extra regions found.

注意事项:

1.在决定是否传入-f参数时,应当检查多余的Region是否存在region overlap,若存在,可以传入-f以删除meta表多余的Region信息,若不存在,应当调用assigns命令,创建一个新的Region目录写入HDFS。

  1. ≤1.1.0的hbase-operator-tool版本的修复工具在info:regioninfo为空时使用该命令会失效。

Hbase Hbck2修复工具介绍和实践

fixMeta

使用说明:

对 hbase:meta 中的错误或不一致状态进行服务端修复,在 hbase 2.2.1/2.1.6 或更新版本中可用。Master UI 具有匹配的新 'HBCK Report' 选项页,可保存由最近运行的 catalogjanitor和新的 'HBCK Chore' 生成的报告。在进行任何其他修复之前,首先使 hbase:meta 保持健康是至关重要的。修复 'holes'、'overlaps' 等时,在 HDFS 中创建(空)region 目录以匹配添加到 hbase:meta 的 region。命令与类似名字的旧 _hbck1_ 命令不同。针对上次 catalog_janitor 和 hbck chore 运行生成的报告工作,如果没有什么要解决的,运行就是一个 noop。 否则 'HBCK Report' UI 报告问题,运行 fixMeta 将清除 hbase:meta 问题。

注意事项:

  1. 对于HBase2.1.X,在HBase版本号≥2.1.6时才能使用,对于HBase2.2.X,在HBase版本号≥2.2.1时才可使用,也就是说基于CDH6.3.2的采集2.0的HBase是不支持此命令的。

Hbase Hbck2修复工具介绍和实践

reportMissingRegionsInMeta

使用说明:

执行命令后会去查看.regionInfo文件有但是meta表没有的region信息。

在 hbase:meta 中缺少 region 并仍然存在于 HDFS 目录下时使用。这是一个仅用于 CHECK 的方法,设计用于报告目标并且不执行任何修复,提供了查看哪些 region(如果有)将被重新添加到 hbase:meta,按相应的 table/namespace 分组。想有效地在元数据表中重新添加 region,请运行'addFsRegionsMissingInMeta'。此命令需要 hbase:meta 在线, 对于作为参数指定的每个namespace/table 它执行 hbase:meta 中 可用 region 与 HDFS 上现有 region 目录之间的比对, 没有匹配项的 region 目录在其相应表名下分组打印; 没有缺失 region 的表将显示 "No mismatching regions" 消息。如果未指定 namespace 或 table,它将验证所有现有 region, 它接受多个 namespace 和 table 的组合, 即使对于默认命名空间中的表也应该包含命名空间,否则它将假定一个命名空间值。

注意事项:

  1. 这只是一个用于检查Region的命令,需要往meta表中添加记录的话要使用addFsRegionMissingInMeta。

Hbase Hbck2修复工具介绍和实践

assigns

使用说明:

向Master发送请求,由Master来分配Region。后面可以接多个region,重新执行assign 过程,返回值是创建的pid则为成功,-1则为失败。

OPTIONS:

  1. -o,--override 这里的override跟bypass的override不同,因为assign本身就会创建一个新的procedure, 所以肯定是不涉及到拿IdLock的,但是这里涉及到资源锁的问题。因为之前卡住的资源锁即使在bypass后也不会释放(用于fence, 防止更多未知的错误操作),所以需要加一个-o去手动释放这个资源锁。

  1. -i,--inputFiles 可以在一个文件中指定一个或者多个region。

注意事项:

  1. 该命令在HBase Master处于初始化阶段就可以使用,当hbase:meta表所在Region迟迟不分配上线时可以用命令手动指定上线。

Hbase Hbck2修复工具介绍和实践

unassigns

使用说明:

向Master发送请求,由Master来将Region从HBase节点上解除分配。将一个或多个region unassign,返回值是创建的pid则为成功,-1则为失败。

OPTIONS:

1.-o,--override 与assigns一致。

注意事项:

  1. 该命令在HBase Master处于初始化阶段就可以使用。

Hbase Hbck2修复工具介绍和实践

setRegionState

使用说明:

执行命令后,会从Meta表获取该region状态信息,并将新状态写进去。

手动设置region 的状态,可选的状态有OFFLINE, OPENING, OPEN, CLOSING, CLOSED, SPLITTING, SPLIT, FAILED_OPEN, FAILED_CLOSE, MERGING, MERGED, SPLITTING_NEW, MERGING_NEW, ABNORMALLY_CLOSED,返回0表示成功,1表示失败。hbase:meta表中可能的表状态和表示形式:ENABLED(\ x08 \ x00),DISABLED(\ x08 \ x01),DISABLING(\ x08 \ x02),ENABLING(\ x08 \ x03)。

注意事项:

1.使用这个命令前,一定要确认这个region 不在assign 和unassign procedures 中,你可以在hbase shell 中使用命令 list_procedures 进行查看这个region 的状态。

  1. 该命令在HBase2.1.0-cdh6.3.2里仅更新meta表中的Region信息,不会更新Master中缓存的Region状态信息,需要重启Master。

Hbase Hbck2修复工具介绍和实践

bypass

使用原理:

bypass可以将一个或多个卡住的procedure进行释放。原理很简单,在procedure的类里有一个bypass的flag, 每次执行时会检查这个flag是否为true,如果为true则直接返回null, 这样procedure就会被认为执行成功。而bypass就是把这个procedure对象中的这个flag直接设为true。 这样stuck的procedure就不再执行,也不会继续卡在哪里,释放了锁后,那么后面才能进行修复工作。返回值为true则是成功,false是失败。

OPTIONS:

  1. -o,--overide 在执行bypass之前先会尝试去拿IdLock, 如果procedure还在运行就会超时返回null,但是设置了这个参数即使拿不到IdLock也会去将procedure的bypass flag设为true。

  1. -r, --recursive 在bypass一个procedure时也会将这个procedure的所有子procedure进行递归的bypass。例如我们bypass一个对table schema修改的procedure, 就需要加上-r参数,才能把这个操作的所有子procedure都bypass掉。--有父procedure时使用

  1. -w, --lockWait 上文提到的等待IdLock的超时时间配置,默认为1ms 一般不用。

注意事项:

  1. 该命令会使处于RIT状态的Region停留在中间状态,需要人工干预后执行后续修复过程。

Hbase Hbck2修复工具介绍和实践

scheduleRecoveries

使用说明:

向HBase Master发送ScheduleServerCrashProcedureRequest,执行ServerCrashProcedure,以处理RegionServer宕机后的处理工作,包含WAL切分,RegionServer上的Region分配与挂载等操作。

注意事项:

  1. 该命令的意义是完成RegionServer宕机后的处理工作,不是让已经宕机的RegionServer复原。

Hbase Hbck2修复工具介绍和实践

replication

使用说明:

检查表复制队列中应清除但未清除的存储信息,若传入-f会删除这些信息并删除meta表中的ReplicationBarrier。

Hbase Hbck2修复工具介绍和实践

setTableState

使用说明:

执行命令后,修改hbase:meta表中表示数据表状态的table:state数据列的值并更新Master中缓存的数据表状态。可选的table状态有ENABLED, DISABLED, DISABLING, ENABLING,在table的状态和所有的region状态不一致时可以用这个命令进行修复,使用之前建议使用:desc 'tablename' 查看一下当前表的状态。

注意事项:

  1. 该命令不会修复HBase的文件系统完整性问题(比如出现overlap、Orphans或Hole)。

Hbase Hbck2修复工具介绍和实践

generateMissingTableDescriptorFile

使用说明:

执行命令后先检查TableDescriptor是否缓存在hmaster中,如果是,则直接通过缓存生成,如果不在,则通过表名、列族(表目录确定)、默认配置和列族描述符。

修复表tableinfo,类似hbck1的fixTableOrphan.如果表目录直接丢失,则不能正常修复。

注意事项:

  1. 当数据表对应文件目录缺失或.tableinfo存在时,该命令不会生效

Hbase Hbck2修复工具介绍和实践

filesystem

使用说明:

执行完命令后会调用fsck进行文件修复。生成环境中,有的时候会出现hfile 损坏,hfile引用损坏,hbase.version 丢失或者links 损坏等,这个时候可以使用--fix 进行修复。

OPTIONS:

  1. -f, --fix [<TABLENAME>...] 默认是修复所有表。

注意事项:

  1. --fix不会修复数据完整性问题,比如holes 和 orphan 的region。

Hbase Hbck2修复工具介绍和实践

MissingRegionDirsRepairTool

使用说明:

获取hbase:meta表中不存在但是在HBase数据文件目录中存在的Region目录,将数据文件移至临时目录并用bulkload的形式写入对应HBase表。

注意事项:

  1. 操作完成后需检查HBase的数据完整性,并手动清除临时目录下的没用的数据文件。

Hbase Hbck2修复工具介绍和实践

RegionsMerger

使用说明:

对数据表中处于OPEN状态的且连续的Region进行两两合并,直到Region数量小于等于目标数值或连续N轮没有产生有效的Merge操作。

注意事项:

  1. 合并后Region大小阈值 = hbase.tools.merge.upper.mark(默认0.9) * 单个Region数据量最大值。 2.hbase.tools.max.iterations.blocked用于控制没有产生有效Merge轮数的阈值 3.如确认要大规模回收空Region,必须在检修时,有人值守的情况下使用该工具。

Hbase Hbck2修复工具介绍和实践

RegionsOnUnknownServersRecoverer

使用说明:

解析HBase的Master日志,对其中unknown_server指向的RegionServer执行ServerCrashProcedure。

Hbase Hbck2修复工具介绍和实践

OfflineMetaRepair

使用说明:

在HBase文件系统完整的前提下,备份原损坏的hbase:meta表,并使用文件系统中保存的元数据重建hbase:meta表,-details会在重建hbase:meta表之前打印所有Region的信息, -base用于手动指定HBase根目录,-sidelineDir用于指定hbase:meta表的备份目录。

注意事项:

  1. 务必在HBase集群离线的状态下使用该命令。

Hbase Hbck2修复工具介绍和实践

使用说明:

使用多线程scan的方式进行数据抽样,进而统计指标,-l用于指定单线程scan操作的行数限制,-f用于指定抽样Region占数据表Region总数的百分比,-r用于指定对某个Region进行抽样, -t用于指定执行scan的线程数。

  • 案例

3.1 案例一

Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践

3.2 案例二

Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践

开始修复

Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践

发现执行:hbase hbck -j hbase-hbck2-1.0.0.1.0.0.0-278.jar addFsRegionsMissingInMeta ‘TEST:DATA_HUB_TEST_16’后提示:

1 regions were added to META, but these are not yet on Masters cache.

You need to restart Masters, then run hbck2 'assigns' command below:

assigns a7831e6ca30f45115da47c22469a235c

根据提示重启Master并执行:hbase hbck -j hbase-hbck2-1.0.0.1.0.0.0-278.jar assigns a7831e6ca30f45115da47c22469a235c

Hbase Hbck2修复工具介绍和实践

重启Master 并执行 assign 但 assign 失败

最后发现addFsMissingRegionInMeta只修复了info:regioninfo列的信息,没有更新HBase Master的缓存,且缺少Region状态信息,重启后Master缓存信息消失,因此assign失败,此时需要执行:

hbase hbck -j hbase-hbck2-1.0.0.1.0.0.0-278.jar setRegionState a7831e6ca30f45115da47c22469a235c CLOSED

再重启Master,执行:hbase hbck -j hbase-hbck2-1.0.0.1.0.0.0-278.jar assigns -o a7831e6ca30f45115da47c22469a235c进行挂载

3.3 案例三

Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践
Hbase Hbck2修复工具介绍和实践

extraRegionsInMeta进行缺失HDFS目录的Region的查询结果表明缺失的Region为e3f853f641d4c0047210531bfe9b45fc,我们需要将该Region在hbase:meta表中的状态置为下线,因此执行:hbase hbck -j /home/hbase/hbase-hbck2-1.0.0.1.0.0.0-278.jar unassigns -o e3f853f641d4c0047210531bfe9b45fc

Hbase Hbck2修复工具介绍和实践

再使用assigns命令,触发AssignProcedure,创建e3f853f641d4c0047210531bfe9b45fc的数据目录并上线,因此执行:hbase hbck -j /home/hbase/hbase-hbck2-1.0.0.1.0.0.0-278.jar assigns -o e3f853f641d4c0047210531bfe9b45fc

Hbase Hbck2修复工具介绍和实践

hdfs 上生成了数据目录,但只是生成了目录

Hbase Hbck2修复工具介绍和实践
  1. 结语

希望能帮助到大家!以后有相关的问题会继续更新。文章来源地址https://www.toymoban.com/news/detail-405567.html

到了这里,关于Hbase Hbck2修复工具介绍和实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HBase的编程实践(实验3_熟悉常用的HBase操作)

    一、Hbase中使用Shell命令: ① HBase中创建表:(create 命令:第一个变量是表名,然后是列族名) 语法:create \\\'表名称\\\',\\\'列族名称1\\\',\\\'列族名称2\\\',\\\'列族名称N\\\' 通过命令 describe \\\'student\\\'  进行查看表的结构: (desc ‘表名’,查看表的结构) ✿ 增加数据 ② put: (put 命令:第一

    2024年02月01日
    浏览(44)
  • HBase Java API编程实践

    本实例采用Eclipse开发工具。 启动Eclipse,启动以后,出现如下图所示界面,点击ok按钮。 启动进入Eclipse以后的程序开发界面如下图所示。 点击界面顶部的“File”菜单,在弹出的子菜单(如下图所示)中选择“New”,再选择子菜单中的“Project”。 这时会弹出一个Java工程创建

    2024年02月05日
    浏览(38)
  • Hbase的bulkload流程与实践

    一、前言   通常 MapReduce 在写 HBase 时使用的是 HTableOutputFormat 方式,在 reduce 中直接生成 put 对象写入 HBase ,该方式在大数据量写入时效率低下(HBase 会 block 写入,频繁进行 flush、split、compact 等大量 IO 操作),并对 HBase 节点的稳定性造成一定的影响(GC 时间过长,响应变

    2024年02月10日
    浏览(37)
  • 大数据实验三-HBase编程实践

    目录 一.实验内容 二.实验目的 三.实验过程截图及说明 1、安装HBase 2、配置伪分布式模式: 3、使用hbase的shell命令来操作表: 4、使用hbase提供的javaAPI来编程实现类似操作: 5、实验总结及心得体会 6、完整报告在文章开头,挂载。 HBase编程实践: 1)在Hadoop基础上安装H

    2024年04月12日
    浏览(62)
  • 华为云HBase冷热分离最佳实践

    本文分享自华为云社区 《华为云HBase 冷热分离最佳实践》,作者:pippo。 HBase是Hadoop Database的简称,是建立在Hadoop文件系统之上的分布式面向列的数据库,它具有高可靠、高性能、面向列和可伸缩的特性,提供快速随机访问海量数据能力。 HBase采用Master/Slave架构,由HMaster节

    2024年02月08日
    浏览(43)
  • 关于hbase无法正常关闭进程,进程持续出现‘......‘

    使用jps命令查看当前进程,但是注意不要用kill -9命令杀死进程,使用该进程杀死当前进程后,还会继续冒出新的进程,无法做到真正意义上的杀死进程或者关闭进程。 可以使用以下命令进行HMater和HRegionserver进程的依次关闭 hbase-daemon.sh stop master hbase-daemon.sh stop regionserver 然后

    2024年02月12日
    浏览(41)
  • 大数据开源框架之HBase编程实践

    HBase的安装部署请看: (30条消息) 大数据开源框架环境搭建(五)——Hbase完全分布式集群的安装部署_木子一个Lee的博客-CSDN博客 目录 任务1:用HBase提供的HBase Shell命令实现以下指定功能: 1.列出HBase所有的表的相关信息 2.在终端打印出指定的表的所有记录数据; 3.向已经创建好

    2024年02月01日
    浏览(39)
  • HBase的数据压缩与存储效率实践

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase适用于大规模数据存储和实时数据访问场景,如日志记录、实时数据分析、实时数据挖掘等。 数据压缩是提高存储效率和

    2024年02月20日
    浏览(32)
  • HBase2.2.2安装和编程实践

    如果你正在安装,请用hadoop用户 HBase介绍 HBase是一个分布式的、面向列的开源数据库,源于Google的一篇论文《BigTable:一个结构化数据的分布式存储系统》。HBase以表的形式存储数据,表有行和列组成,列划分为若干个列族/列簇(column family)。欲了解HBase的官方资讯,请访问(htt

    2024年02月04日
    浏览(51)
  • HBase的数据类型与数据结构实践

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase的核心功能是提供低延迟、高可扩展性的数据存储和访问,适用于实时数据处理和分析场景。 在HBase中,数据是以行为单位

    2024年02月20日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包