HBase HBCK运维指南

南墨10个月前技术文章487

HBase HBCKHBase运维人员经常会用到的一个HBase运维工具,主要是用于检查 HBase region等元数据一致性以及修复的工具。

目前HBCK工具有两个版本,本次主要介绍用于HBase 2.x内核版本的HBCK2。后面提到的 HBCK都是只HBCK2,如果涉及HBCK1会单独说明。两个版本的HBCK工具在设计上已经发生的非常大的变化,在使用方式上也有比较大的差异,两个版本的工具只能使用在对应的内核版本上,无法混用。

如何

 

HBCK2HBCK1比较,最大的变化就是HBCK2的检查是在HMaster上运行的,HBCK1运行在客户端的。

HBCK检查主要包含两部分:HBCK Chore ReportCatalogJanitor Consistency Issues Report

HBCK Chore Report:主要检查HMaster内存,RegionServer内存,HDFS三个地方的region信息的一致性,包括region是否存在,regiondeploy信息是否一致。由于检查的顺序是HMaster内存(meta)->RS->HDFS,所以如果metaregion信息不存在,该检查是不会检查出来异常。

report默认1小时会刷新一次,刷新周期通过参数 hbase.master.hbck.chore.interval,参数值<=0时此功能被禁用。用户也可以手动hbase shell执行hbck_chore_run来触发。

CatalogJanitor Consistency Issues Report:主要检查meta表中的region信息是否完整,是否存在overlpadhole问题。该report默认300s会刷新一次,刷新周期通过参数hbase.catalogjanitor.interval。用户也可以手动在hbase shell执行 catalogjanitor_run来触发。catalogjanitor_switch可以用来开启/关闭此功能。

 

 

如何报告

 

进入HMaster页面,选择HBCK Report页签查看report。由于report是异步生成,执行命令后,可能需要等待一段时间才能看到结果。

1.jpg

HBCK2使

HBCK2的工具类文件默认不在HBase客户端的classpath下,需要手动指定才能使用。使用说明以HBase客户端安装目录为/opt/client,使用的jar版本号为hbase-tools-2.2.3-hw- ei-311001-SNAPSHOT.jar为例,实际使用时请以当前的环境信息为准。

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei-311001-

SNAPSHOT.jar COMMAND

其中COMMANDARGS参考下面的参数说明。

关于权限,HBCK2HBCK1也有很大的不一样,HBCK2不再要求必须使用用户hbase进行操作,只需要当前用户具备当前操作的权限即可。

HBCK2参数(COMMAND)说明:

 

setTableState

参数说明:设置表的状态。2.x版本开始,HBase的表状态不再记录到zk上,所有表的状态都记录到hbase:meta表的table:state列中(meta表自己除外)。该命令只会将 HMaster缓存以及meta表中的状态强制更新为指定状态,不会操作region。支持的表状态:ENABLEDDISABLEDDISABLINGENABLING。返回值为更新前的状态。

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar setTableState tableName STATE

举例:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar setTableState testTable DISABLED

assigns

参数说明:assign  region,让region重新上线。该命令支持两个可选的参数-o, -i

-o, 指定是否强制覆盖当前的Procedure,不指定的话,会对region的状态进行检查,如果该region有关联的Procedure任务或者region的状态不是CLOSEDOFFLINE,该操作会执行失败;

-i,    如果一次需要操作多个region,除了在命令后面指定多个encoded regionname(空格分开),还可以通过该参数指定一个或多个本地文件,文件内容为  encoded regionname(一行一个region)

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar assigns encodedRegionName1 encodedRegionName2...

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar assigns -i ileName1 ileName2...

举例:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4


如果ritregion很多,可以参考如下截图步骤将所有的rit  region拷贝到文本文件中。

 

bypass

参数说明:中止指定的Procedure任务。当一个Procedure任务长时间未结束需要手动停止时,可以使用该命令。执行该操作可能会导致该任务对应的表,region的状态不一致,需要手动修复。如果命令执行成功则返回true,否则返回false

该命令支持可选的参数有:-o,  -r,  -w

-o, Procedure任务执行时会获取一个IdLock,避免一个任务被多个线程处理。 bypass任务时,如果不指定该参数,并且该任务还债运行中,则会导致bypass败。指定该参数,会强制将任务的bypass标识设置为true

需要注意:如果bypassProcedure没有父Procedure,也没有子Procedure,则可以直接bypass

如果有父Procedure,则当前Procedure的状态不能为RUNNABLE, WAITTING,

WAITTING_TIMEOUT,否则会bypass失败;

如果有子Procedure,则参考下面一个参数的说明。

-r,   如果指定的Procedure还存在subProcedure,则需要指定该参数,然后会把该任务是所有子任务都先bypass掉,否则指定的Procedurebypass失败。

-w, -o参数中提到的获取IdLock的超时时候,如果没有指定-o的话,会等待获取 IdLock直到超过该超时长。默认1ms

unassigns

参数说明:将指定的一个或者多个region下线。该操作会为每一个region创建一个

TRSP

该命令支持参数-o,如果不指定该参数,创建TRSP之前,会检查region的状态,需要同时满足三个条件:region状态为OPEN,该表的状态非DISABLEDDISABLING, region没有关联的Procedure,否则会执行失败。如果该region已有对应的TRSP,新提交的TRSP任务会等待。创建成功则返回新建TRSPpid,否则返


-1。该命令只能处理处于OPEN, CLOSING, MERGING, SPLITING状态的 region

setRegionState

参数说明:该参数用于强制把meta表中的region状态修改为指定的状态。该参数一般需要配合assigns/unassigns命令使用。因为执行assigns/unassigns命令需要 region处于特定的状态,当region状态出现不一致,需要手动干预时,可能需要使用该命令强制将region修改为特定的转改。

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSED

支持修改的状态有:OFFLINE, OPENING, OPEN, CLOSING, CLOSED, SPLITTING, SPLIT,

FAILED_OPEN,  FAILED_CLOSE,  MERGING,  MERGED,  SPLITTING_NEW,

MERGING_NEW, ABNORMALLY_CLOSED

filesystem

参数说明:该参数主要用于修复/hbase目录下的不一致问题,开源版本仅提供了修复损坏的HFile文件,错误的referenceHFileLink文件以及hbase.version文件问

题;

MRS版本回合了hbck1的部分功能,包括region目录的空洞,重叠,残留的split  region目录等问题。

该参数支持的选项有:

-sidelineCorruptHFiles:检查指定的表(默认全部)是否存在损坏的HFile文件并修复;

-fixReferenceFiles:用于检查指定的表(默认全部)是否存在损坏的HFile文件并修复;

-fixReferenceFiles:用于检查指定的表(默认全部)是否存在损坏的HFile文件并修复;

-fixVersionFile:用于检查指定的表(默认全部)是否存在损坏的HFile文件并修复;该操作不再要求HBase服务可用;

-fix:作用等同于同时指定上面4个参数,该参数为HBCK2开源版本提供的参数,其余参数为MRS特有;

-fixHdfsOrphans 用于检查修复缺失.regioninfo文件的问题。如果该region录下没有列簇目录或者,无法修复。修复时先从meta表获取该region的数据并重新生成.regioninfo文件,否则从该region下的hfile解析出startkeyendkey并生

.regioninfo文件。如果没有hfile,则删除该region目录,然后需要通过-   fixHdfsHoles修复region空洞;

-fixHdfsHoles:用于检查和修复region空洞;

-fixHdfsOverlaps:用于检查和修复region重叠;

-removeParents:如果parentdaughter  region同时在线,强制下线parent


-fixSplitParents:如果parentdaugh region部分或者都不在线,需要通过该参数进行修复。如果daughter region的信息没有更新到meta表,则重新将parent region上线,否则尝试将daughter region上线并清理parent region。如果此时 Split regionProcedure任务还未结束,默认不执行修复操作。如果Split Procedure任务执行超过一定时间(默认60s),可以使用-force强制中止该问题。用户还可以使用-timeout修改默认的时间,单位为ms

-fixTableOrphans:用于检查修复缺少.tableinfo文件的问题,默认从HMaster

的缓存中获取并重新生成.tableinfo文件,如果获取失败,则使用默认的参数生.tableinfo文件,这样会导致用户设置的参数丢失;

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar filesystem -ix t1 t2

replication

参数说明:用于检查replication的同步队列里面是否还存在已经移除的peer的数据;如果存在,需要通过-f参数进行删除修复;

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar replication -ix t1 t2

scheduleRecoveries

参数说明:创建一个SCP用来处理指定的ServerName。正常情况下,meta表中记录region所在的ServerName应该是在线的RegionServer,但是记录的 ServerName已经不存在,会导致region一致性的问题,需要通过此命令创建一个 SCP来进行恢复。

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar replication -scheduleRecoveries sn1 sn2

fixMeta

参数说明:用户修复meta表中存在的region空洞和重叠问题。该操作依赖前面介绍中提到的CatalogJanitor Consistency Issues Report,主要是针对该report中的问题进行修复操作。如果meta表和HDFS目录同时出现空洞,应该先对meta表进行修复;

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar fixMeta

listInconsistencies

参数说明:使用命令的方式获取漆面提到的hbck report。当HMaster的原生页面无法访问时,可以通过此方式来获取report;可以指定参数-run需要重新生成hbck repor。默认返回所有的数据,也可以返回指定表的结果;

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar listInconsistencies -run default:t1 default:t2

reportMissingRegionsInMeta


参数说明:检查HDFSmeta表中的region信息,并列出meta表中确实的region息。需要注意:如果meta表中没有表的state信息,该检查不会对该表进行检查;默认检查所有的表,可以指定一个或者多个namespace或者表,如果是default命名空间下的表,也需要指定命名空间。

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar reportMissingRegionsInMeta namespace1 default:t2

addFsRegionsMissingInMeta

参数说明:reportMissingRegionsInMeta只做检查,该参数检查并修复meta表中确实的region信息。必须指定至少一个namespace或者表;修复的regionmeta中的状态为CLOSED,需要手动执行assigns操作让region上线;

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar addFsRegionsMissingInMeta namespace1 default:t2

extraRegionsInMeta

参数说明:与reportMissingRegionsInMeta相反,用于检查meta表中多余的

region信息。如果需要修复,需要指定参数-fix使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar extraRegionsInMeta -f namespace1 default:t2

fixRITAssignment

参数说明:检查rit超过一定时间的region并尝试修复。该操作只对状态为 FAILED_OPEN并且没有关联的TRSPregion有效。执行成功后,会创建一个新的  TRSP

使用说明:

hbase hbck -j /opt/client/HBase/hbase/tools/hbase-tools-2.2.3-hw-ei- 311001-SNAPSHOT.jar fixRITAssignment

fixInconsistencies repair

1.   disable一个表失败,部分region除以RIT并且表的状态DISABLING。修复方法:bypass掉该表以及region相关的Procedure任务,然后使用

setTableState将表的状态置为DISABLED。为了保证region的状态一致,建议重新 enable该表后再disalbe一次。

2.     region处于RIT无法上线。

修复方案:bypass掉该regionprocedure, 然后根据状态决定使用assigns或者 unassigns重新触发TRSP。由于region rit的场景多种多样,实际的修复方案可能需要具体分析。另外,HMaster原生页面的HBCK report里面针对一些异常情况也有修复建议。

 

3.     数据迁移场景下,将表的目录完整拷贝过来后,如何让表上线?


修复方案一:允许离线的情况下,先停掉HBase服务,然后使用olineMetaRepair进行meta表数据的修复,然后启动HBase服务;


相关文章

oracle v$archive_log视图过期信息清理

      在使用RMAN命令删除归档后,查询v$archived_log视图会发现name列为空了,但其他列的信息还保留,时间长了会留下很多过期的信息,影响维护工作,需要将过期的信息删除。 出现这样...

Python 并发编程 Futures

Python 并发编程 Futures

说明编程中如果能合理利用编程语言的并发编程技巧,都可以极大提升程序的性能。在 Python 3.2 版本为用户提供了一个标准库 concurrent.futures 可以实现进程池 和 线程池,本篇文...

MongoDB的索引(四)

九、Text Indexes示例集合> db.ttlsa_com.find() { "_id" : ObjectId("5d2f35f6c1aace30b3ce9904"), "song" :...

linux中的buffer和cache

linux中的buffer和cache

linux中的buffer和cache一、buffer和cache的来源及应用1、来源Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储。那么,这两种“临时存储”有什么区别...

ubuntu安装mysql

执行sudo apt install mysql-server启动mysqlsudo systemctl start mysql查看状态sudo systemctl status mysql查看默认密...

PG的表膨胀

1 什么是表膨胀众所周知,PostgreSQL的多版本并发是通过保留变更前的记录来实现的。当数据记录被DML修改,旧版本记录仍保留不变,仅仅需要修改相关记录的xmin、xmax属性,并新增写入变更后的...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。