前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用HBCK2工具修复HBase集群

使用HBCK2工具修复HBase集群

作者头像
大数据杂货铺
发布2021-02-07 14:38:20
2.9K0
发布2021-02-07 14:38:20
举报
文章被收录于专栏:大数据杂货铺大数据杂货铺

HBCK2工具是修复工具,可用于修复Apache HBase集群,包括CDP中的Apache HBase集群。HBCK2工具是Apache HBase hbck工具的下一版本。

要确定正在运行的HBase集群中的不一致或阻塞的列表,可以通过查看主日志来发现。一旦发现问题,就可以使用HBCK2工具修复缺陷或跳过不良状态。HBCK2工具使用交互式修复过程,要求Hbase Master进行修复,而不是在本地进行修复。

HBCK2每次运行时都会执行一个单独的任务。HBCK2工具不会分析正在运行的集群中的所有内容并修复所有问题。相反,您可以使用HBCK2工具来迭代地查找和修复集群中的问题。HBCK2工具使您可以使用交互式命令来一次解决一个问题。

重要

HBCK2工具特定于Apache HBase的内部。使用此工具需要特定于您的CDP运行时版本的二进制文件,并且您必须始终在Cloudera支持和/或Cloudera专业服务的帮助下使用它。如果您认为需要使用HBCK2工具遇到问题,请联系Cloudera支持。

运行HBCK2工具

您可以从目标集群中的命令行界面运行HBCK2工具。

HBCK2工具是hbase-operator-tools二进制文件的一部分。从Cloudera获得hbase-operator-tools二进制文件后,将二进制tarball上传到目标集群并解压缩tarball。HBCK2 JAR文件包含在Cloudera支持提供的操作员工具tarball中,位于 hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar.处。

代码语言:javascript
复制
[root@cdp hbase-hbck2]# pwd
/root/hbase-operator-tools-1.0.0.1.0.0.0-831/hbase-hbck2
[root@cdp hbase-hbck2]# ls -lrt
total 5860
-rw-r--r-- 1 root root   39080 Jan 22  2020 README.md
-rw-r--r-- 1 root root   23241 Jan 22  2020 log4j-slf4j-impl-2.11.1.jar
-rw-r--r-- 1 root root 1607947 Jan 22  2020 log4j-core-2.11.1.jar
-rw-r--r-- 1 root root  264060 Jan 22  2020 log4j-api-2.11.1.jar
-rw-r--r-- 1 root root 1931038 Jan 22  2020 hbase-tools-1.0.0.1.0.0.0-831.jar
-rw-r--r-- 1 root root 2124226 Jan 22  2020 hbase-hbck2-1.0.0.1.0.0.0-831.jar
[root@cdp hbase-hbck2]#

通过使用“ -j”选项指定JAR路径来运行HBCK2工具,如下所示:

代码语言:javascript
复制
$ hbase hbck -j $HOME/hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar

运行命令时,将显示HBCK2工具命令行菜单。

代码语言:javascript
复制
[root@cdp hbase-hbck2]# hbase hbck -j hbase-hbck2-1.0.0.1.0.0.0-831.jar
SLF4J: Class path contains multiple SLF4J bindings.
…
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
…

作为使用此工具修复HBase集群的Cloudera支持或专业服务人员,您可以使用以下命令以HBase超级用户(通常为hbase)或HBase Principal(如果启用了Kerberos)收集有用的信息:

代码语言:javascript
复制
$ hdfs dfs -ls -R /hbase/ 2>&1 | tee /tmp/hdfs-ls.txt
$ hbase hbck -details 2>&1 | tee /tmp/hbase-hbck.txt
$ echo "scan 'hbase:meta'" | hbase shell 2>&1 | tee /tmp/hbase-meta.txt
[root@cdp tmp]# ls -lrt h*txt
-rw-r--r-- 1 root root 13521 Jan 23 02:36 hdfs-ls.txt
-rw-r--r-- 1 root root 59876 Jan 23 02:36 hbase-hbck.txt
-rw-r--r-- 1 root root  6636 Jan 23 02:37 hbase-meta.txt
[root@cdp tmp]#

发现问题

HBCK2工具使您可以使用交互式命令来一次解决一个问题。如果有多个问题,则可能必须迭代运行该工具以查找和解决所有问题。使用以下实用程序和命令等诊断工具来查找问题。

主日志

Apache Hbase Master运行所有集群启动和停止操作、RegionServer分配以及服务器崩溃处理。Hbase Master所做的一切都是在状态机引擎上执行一个过程,并且每个过程都有唯一的过程ID(PID)。您可以通过在主日志中的条目跟踪过程的PID来跟踪过程的生命周期。某些过程可能会生成子过程,并等待子过程完成。

您可以通过跟踪子过程的PID和父PID(PPID)来跟踪子过程。

如果RegionServer分配存在问题,则主服务器将打印类似于以下内容的STUCK日志条目:

代码语言:javascript
复制
2018-09-12 15:29:06,558 WARN
org.apache.hadoop.hbase.master.assignment.AssignmentManager: STUCK
Region-In-Transition rit=OPENING, location=va1001.example.org,00001,1000173230599,
table=IntegrationTestBigLinkedList_20180626110336,
region=dbdb56242f17610c46ea044f7a42895b

主用户界面

状态表

通过查看主用户界面主页上的状态表部分,可以在HBase表中找到问题。浏览表列表以识别表是ENABLED, ENABLING, DISABLED,还是DISABLING。您还可以查看处于过渡状态的区域:“OPEN, CLOSED”。例如,如果表已启用,某些区域未处于OPEN状态以及Master日志条目没有任何正在进行的分配,则可能会出现问题。

Procedures&Locks

启动Apache HBase集群时,将在Master用户界面中的Procedures&Locks页面中填充有关过程、锁和WAL文件计数的信息。集群建立后,如果WAL文件数没有减少,则会导致过程阻塞。您可以在此页面上标识这些过程和锁。

您还可以在HBase shell中使用此命令获取锁和过程的列表:

代码语言:javascript
复制
$ echo "list_locks"| hbase shell &> /tmp/locks.txt
$ echo "list_procedures"| hbase shell &> /tmp/procedures.txt
Apache HBase金丝雀工具

使用HBase Canary工具来验证集群中分配的状态。您可以运行此工具以仅关注一个表或整个集群。您可以使用以下命令检查集群分配:

代码语言:javascript
复制
[root@cdp tmp]# hbase canary -f false -t 6000000 &>/tmp/canary.log
[root@cdp tmp]# cat /tmp/canary.log
21/01/23 03:08:39 INFO tool.Canary: Execution thread count=16

使用-f参数查找失败的区域提取,并将-t参数设置为在指定时间运行。

解决问题

您可以使用HBCK2工具解决问题。

使用HBCK2修复问题时,必须牢记这些。确保这件事:

  • 区域在“分配”期间未处于“CLOSING”状态,在“未分配”期间未处于“OPENING”状态。您可以使用setRegionState命令更改状态。有关更多信息,请参见HBCK2工具命令参考部分。
  • 一次只能修复一张表。

重要

在使用任何HBCK2工具命令之前,请联系Cloudera支持。

解决分配和取消分配问题

您可以通过监视当前未完成锁列表来解决分配和取消分配问题。针对锁定区域的分配将等待,直到释放锁定。分配在该区域上获得排他锁。

修复主启动无法进行的错误

如果您在Master日志中看到错误master startup cannot progress holding-pattern until region online,则表明Master无法启动,因为没有分配hbase:meta的过程。您将看到类似于以下内容的错误消息:

代码语言:javascript
复制
2020-04-01 22:07:42,792 WARN org.apache.hadoop.hbase.master.HMaster:
hbase:meta,,1.1588230740 is NOT online; state={1588230740 state=CLOSING,
ts=1538456302300, server=ve1017.example.org,22101,1234567891012};
ServerCrashProcedures=true. Master startup cannot progress in holding-pattern until region onlined.

要解决此问题,请运行以下命令:

代码语言:javascript
复制
$ hbase hbck -j $HOME/hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar
assigns 1588230740

hbase:namespace系统表可能发生相同的问题。要解决此问题,请运行以下命令:

代码语言:javascript
复制
$ hbase hbck -j $HOME/hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar
assigns <hbase:namespace encoded region id>

您可以使用以下命令找到名称空间编码的区域标识:

代码语言:javascript
复制
$ echo "scan 'hbase:meta',{COLUMNS=>'info:regioninfo',
FILTER=>\"PrefixFilter('hbase:namespace')\"}" | hbase shell

命名空间编码区域ID是结果中“ ENCODED”字段下的值。

修复hbase:meta区域/表中的缺失区域

如果遇到从hbase:meta表中删除表区域的问题,则可以使用addFsRegionsMissingInMeta解决此问题。确保主服务器在线。该命令不像hbase:meta rebuild命令那样具有破坏性。

要解决此问题,请运行以下命令:

代码语言:javascript
复制
$ hbase hbck -j $HOME/hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar
addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>

该命令将返回包含所有列出的重新插入区域的HBCK2“分配”命令。您必须重新启动主服务器,然后运行addFsRegionsMissingInMeta命令返回的HBCK2“分配”命令以完成修复。

输出示例:

代码语言:javascript
复制
Regions re-added into Meta: 2
WARNING:
2 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 7be03127c5e0e2acfc7cae7ddfa9e29e e50b8c1adc38c942e226a8b2976f0c8c

修复hbase:meta区域/表中的额外区域

如果hbase:meta中还有多余的区域,则可能是由于手动拆分,删除/移动区域目录时出现问题,或者在极少数情况下是由于丢失了元数据。

要解决此问题,请运行以下命令:

代码语言:javascript
复制
$ hbase hbck -j $HOME/hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar
extraRegionsInMeta --fix  <NAMESPACE|NAMESPACE:TABLENAME>...

重要

仅当额外区域与现有有效区域重叠时,才使用--fix选项。否则,请使用assigns命令重新创建区域。

重建hbase:meta

如果hbase:meta因为已损坏而处于脱机状态,那么如果损坏不太严重,则可以使其重新联机。如果名称空间区域在任务区域中,请在初始化期间扫描hbase:meta以检查hbase:meta是否在线。

要检查hbase:meta是否在线,请在Apache HBase shell中运行以下命令:

代码语言:javascript
复制
$ echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell

如果此扫描没有引发任何错误,则可以运行以下命令来验证表是否存在:

代码语言:javascript
复制
$ hbase hbck -j $HOME/hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar
addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>

如果在存储中存在regioninfo文件,但是该区域由于问题而被删除,则命令addFsRegionsMissingInMeta会将区域添加回hbase:meta表。

修复删除的引用和损坏的HFiles

要修复挂起的引用和损坏的HFile,请运行以下命令:

代码语言:javascript
复制
$ hbase hbck -j $HOME/hbase-operator-tools-<version>/hbase-hbck2/hbase-hbck2-<version>.jar
filesystem --fix [<TABLENAME>...]

HBCK2工具命令参考

您可以在目标集群的命令行界面中使用此HBCK2命令列表。

HBCK2命令

代码语言:javascript
复制
addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>...

选项:-d,-force_disable如果禁用失败,则使用此选项中止表修复。

assigns [OPTIONS] <ENCODED_REGIONNAME>...

选项:-o,-覆盖使用此选项可以通过另一个过程覆盖所有权。

bypass [OPTIONS] <PID>...

选项:-o,-override如果过程正在运行/卡住,则使用此选项覆盖-r,-recursive使用此选项绕过父项及其子项。

-w,-lockWait使用此选项等待(以毫秒为单位)然后放弃;默认值= 1。

extraRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>...

选项:-f,--fix使用此选项可通过删除找到的所有额外区域来修复meta。

filesystem [OPTIONS] [<TABLENAME>...]

选项:-f,--fix使用此选项可对损坏的HFile,错误链接和引用进行旁注。

replication [OPTIONS] [<TABLENAME>...]

选项:-f,--fix使用此选项可修复复制问题。

代码语言:javascript
复制
reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>...

当hbase:meta中缺少区域但目录仍存在于HDFS中时,请使用此命令。

代码语言:javascript
复制
setRegionState <ENCODED_REGIONNAME> <STATE>

可能的区域状态:OFFLINE, OPENING, OPEN, CLOSING, CLOSED, SPLITTING, SPLIT, FAILED_OPEN, FAILED_CLOSE, MERGING, MERGED, SPLITTING_NEW, MERGING_NEW, ABNORMALLY_CLOSED。

警告

建议仅将此命令用作最后的手段。示例方案包括因为区域在hbase:meta中处于不一致状态而未发生的未分配/分配。

代码语言:javascript
复制
setTableState <TABLENAME> <STATE>

hbase:meta表中可能的表状态和表示形式:ENABLED(\ x08 \ x00),DISABLED(\ x08 \ x01),DISABLING(\ x08 \ x02),ENABLING(\ x08 \ x03)。

代码语言:javascript
复制
scheduleRecoveries <SERVERNAME>...

计划ServerCrashProcedure(SCP)用于RegionServer的列表。将服务器名称格式设置为'<HOSTNAME>,<PORT>,<STARTCODE>'。

代码语言:javascript
复制
unassigns <ENCODED_REGIONNAME>...

选项:-o,-覆盖使用此选项可以通过另一个过程覆盖所有权。

原文链接:https://docs.cloudera.com/cdp-private-cloud-base/7.1.5/troubleshooting-hbase/topics/checking_consistency_in_hbase_tables.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 运行HBCK2工具
  • 发现问题
    • 主日志
      • 主用户界面
        • 状态表
        • Procedures&Locks
        • Apache HBase金丝雀工具
    • 解决问题
    • 解决分配和取消分配问题
    • 修复主启动无法进行的错误
    • 修复hbase:meta区域/表中的缺失区域
    • 重建hbase:meta
    • 修复删除的引用和损坏的HFiles
    • HBCK2工具命令参考
    • HBCK2命令
    相关产品与服务
    TDSQL MySQL 版
    TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档