
一致性是指Region在meta中的meta表信息、Regionserver的Region信息和hdfs的Regioninfo的Region信息三者之间的数据一致。
2:hbase1.xx版本的数据一致性检查 hbase hbck
返回很多内容看最后这部分内容就可看到有多少条不一致
...
130 inconsistencies detected.
Status: INConSISTENT
...
相关的错误都再返回的文本中会显示ERROR,如下:
ERROR: Region { meta => ns_aps:*******,hdfs => hdfs://*******, deployed => ,
replicaId => 0 } not deployed on any region server.
这只是一种报错,还有很多种,下面会进行解析
3:一致性修复命令及详解
新版本的 hbck 可以修复各种错误,修复选项是: (1)-fix,向下兼容用,被-fixAssignments替代 (2)-fixAssignments,用于修复region assignments(分配)错误 (3)-fixmeta,用于修复meta表的问题,其数据以hdfs上存储的为准。 (4)-fixHdfsHoles,修复region holes(空洞,某个region不连续)问题 (5)-fixHdfsOrphans,修复Orphan region(hdfs上面没有.regioninfo的region) (6)-fixHdfsOverlaps,修复region overlaps(区间重叠)问题 (7)-fixVersionFile,修复缺失hbase.version文件的问题 (8)-maxMerge场景应用:(n默认是5),当region有重叠,需要合并region,单次合并的region数不超过这个值。 (9)-sidelineBigOverlaps ,当修复region overlaps问题时,允许跟其他region重叠次数最多的一些 region不参与(修复后,可以把没有参与的数据通过bulk load加载到相应的region) (10)-maxOverlapsToSideline (n默认是2),当修复region overlaps问题时,一组里最多允许多 少个region不参与 由于选项较多,所以有两个简写的选项 (11) -repair,相当于-fixAssignments -fixmeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps (12)-repairHoles,相当于-fixAssignments -fixmeta -fixHdfsHoles -fixHdfsOrphans
(1)缺失hbase.version文件 hbase hbck -fixVersionFile (2)如果一个region即不在meta表中,又不在hdfs上面,但是在regionserver的online region集合中 hbase hbck -fixAssignments (3)如果一个region在meta表中,并且在regionserver的online region集合中,但是在hdfs上面没有 hbase hbck -fixAssignments -fixmeta -fixAssignments告诉regionserver close region -fixmeta删除meta表中region的记录 (4)如果一个region在meta表中没有记录,没有被regionserver服务,但是在hdfs上面有 hbase hbck -fixmeta -fixAssignments -fixAssignments 用于assign region -fixmeta用于在meta表中添加region的记录 (5)如果一个region在meta表中没有记录,在hdfs上面有,被regionserver服务了 hbase hbck -fixmeta 在meta表中添加这个region的记录,先undeploy region,后assign (6)如果一个region在meta表中有记录,但是在hdfs上面没有,并且没有被regionserver服务 hbase hbck -fixmeta 删除meta表中的记录 (7)如果一个region在meta表中有记录,在hdfs上面也有,table不是disabled的, 但是这个region没有被服务 hbase hbck -fixAssignments assign这个region (8)如果一个region在meta表中有记录,在hdfs上面也有,table是disabled的, 但是这个region被某个regionserver服务了 hbase hbck -fixAssignments undeploy这个region (9)如果一个region在meta表中有记录,在hdfs上面也有,table不是disabled的, 但是这个region被多个regionserver服务了 hbase hbck -fixAssignments 通知所有regionserver close region,然后assign region (10)如果一个region在meta表中,在hdfs上面也有,也应该被服务,但是meta表中记录的regionserver和 实际所在的regionserver不相符 hbase hbck -fixAssignments (11)region holes hbase hbck -fixHdfsHoles 创建一个新的空region,填补空洞,但是不assign这个region,也不在meta表中添加这个region的相关信息 (12)region在hdfs上面没有.regioninfo文件 hbase hbck -fixHdfsOrphans (13)region overlaps hbase hbck -fixHdfsOverlaps 说明: (1)修复region holes时,-fixHdfsHoles 只是创建了一个新的空region,用以修补holes, 还需要加上-fixAssignments 用于assign region,-fixmeta用于在meta表中添加region的记录 所以有了组合拳 -repairHoles 修复region holes, 相当于-fixAssignments -fixmeta -fixHdfsHoles -fixHdfsOrphans (2)-fixAssignments,用于修复region没有assign、不应该assign、assign了多次的问题 (3)-fixmeta,如果hdfs上面没有,那么从meta表中删除相应的记录,如果hdfs上面有, 在meta表中添加上相应的记录信息 (4)-repair 打开所有的修复选项,相当于-fixAssignments -fixmeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps 新版本的hbck从(1)hdfs目录(2)meta(3)RegionServer这三处获得region的Table和Region 的相关信息,根据这些信息判断并repair
示例:
查看hbasemeta情况 hbase hbck 1.重新修复hbase meta表(根据hdfs上的regioninfo文件,生成meta表) hbase hbck -fixmeta 2.重新将hbase meta表分给regionserver(根据meta表,将meta表上的region分给regionservere) hbase hbck -fixAssignments
当出现漏洞 hbase hbck -fixHdfsHoles (新建一个region文件夹) hbase hbck -fixmeta (根据regioninfo生成meta表) hbase hbck -fixAssignments (分配region到regionserver上)
一、恢复方式
1、集群50个regionserver,宕掉服务41个,namenode所在机器10.191.135.3不明重启 (原因查找中)导致本机上的namenode、zookeeper、时间同步服务器服务挂掉。 2、重启hbase服务时,没能成功stop剩余的9个regionserver服务,进行了人为kill进程, 3、在hdfs上移走了hlog(避免启动时split log花费过多时间影响服务),然后重启hbase。 发现10.191.135.30机器上的时间与时间同步服务器10.191.135.3不同步。手工同步后重启成功。hbase可以正常提供查询服务。 4、运行mapreduce put数据。抛出异常,数据无法正常插入 5、执行/opt/hbase/bin/hbase hbck -fixAssignments,尝试重新分配region。 结果显示hbase有空洞,即region之间数据不连续了 6、通过上述操作可以定位是在regionserver服务宕掉的后重启的过程中丢了数据。需要进行空洞修复。 然而hbase hbck命令总是只显示三条空洞。 7、通过编写的regionTest.jar工具进行进一步检测出空洞所在的regionname然后停掉hbase,进而进行region合并修复空洞 8、合并的merge 操作需要先去.meta.表里读取该region的信息,由于.meta.表也在regionserver宕机过程中受到损坏, 所以部分region的.meta.信息没有,merge操作时就抛出空指针异常。因此只能将hdfs这些region进行移除, 然后通过regionTest.jar 检测新的空洞所在的regionname,进行合并操作修复空洞 9、关于region重叠,即regionname存在.meta.表内,但是在hdfs上被错误的移出,并进行了region合并。 这种情况下需要通过regionTest.jar检测重叠的regionname然后手动去.meta.表删除,.meta.表修改之后需要flush 10、最后再次执行 hbase hbck 命令,hbase 所有表status ok
二、相关命令及页面报错信息
2.ERROR: Found inconsistency in table ns_srdss:rec_guessyoulike_newvision_gds
3.13/08/01 18:30:02 DEBUG util.HbaseFsck: There are 22093 region info entries
ERROR: There is a hole in the region chain between +8615923208069cmnet201303072132166264580 and +861592321. You need to create a new .regioninfo and region dir in hdfs to plug the hole.
ERROR: There is a hole in the region chain between +8618375993383cmwap20130512235639430 and +8618375998629cmnet201305040821436779670. You need to create a new .regioninfo and region dir in hdfs to plug the hole.
ERROR: There is a hole in the region chain between +8618725888080cmnet201212271719506311400 and +8618725889786cmnet201302131646431671140. You need to create a new .regioninfo and region dir in hdfs to plug the hole.
ERROR: Found inconsistency in table cqgprs
Summary:
-ROOT- is okay.
Number of regions: 1
Deployed on: datanode14,60020,1375330955915
.meta. is okay.
Number of regions: 1
Deployed on: datanode21,60020,1375330955825
cqgprs is okay.
Number of regions: 22057
Deployed on: datanode1,60020,1375330955761 datanode10,60020,1375330955748
Number of regions: 1
Deployed on: datanode21,60020,1375330955825
35 inconsistencies detected.
Status: INConSISTENT
4.ERROR: RegionServer: *******,16020,1630891921705 Unable to fetch region information.
5.================================== first endKey = +8615808059207cmnet201307102326567966800 second startKey = +8615808058578cmnet201212251545557984830 first regionNmae = cqgprs,+8615808058578cmnet201212251545557984830,1375241186209.0f8266ad7ac45be1fa7233e8ea7aeef9. second regionNmae = cqgprs,+8615808058578cmnet201212251545557984830,1362778571889.3552d3db8166f421047525d6be39c22e. ================================== first endKey = +8615808060140cmnet201303051801355846850 second startKey = +8615808059207cmnet201307102326567966800 first regionNmae = cqgprs,+8615808058578cmnet201212251545557984830,1362778571889.3552d3db8166f421047525d6be39c22e. second regionNmae = cqgprs,+8615808059207cmnet201307102326567966800,1375241186209.09d489d3df513bc79bab09cec36d2bb4. ==================================
6.ERROR: Region { meta => *****,833504,1625012478200.16c804ad63215d1815f94ec16932d3ce., hdfs => null, deployed => , replicaId => 0 } found in meta, but not in HDFS or deployed on any region server.
ERROR: Region { meta => *****,839b7e1,1625012478200.a9e9081c32144461c490b86ed2553280., hdfs => null, deployed => , replicaId => 0 } found in meta, but not in HDFS or deployed on any region server.
ERROR: Region { meta => *****,f87b18c,1629591826980.b2ceebf52f9f9d2bb14f3b652ec22147., hdfs => null, deployed => , replicaId => 0 } found in meta, but not in HDFS or deployed on any region server.
ERROR: Region { meta => *****,95bd1a14b7bb70ff9313f03f1,1629591401620.eacd7ae648ec0f5262de529afc44cc1d., hdfs => null, deployed => , replicaId => 0 } found in meta, but not in HDFS or deployed on any region server.
ERROR: Region { meta => *****,f7fac,1629591826980.fbb3ec2cef99341a17636a3f8041ba87., hdfs => null, deployed => , replicaId => 0 } found in meta, but not in HDFS or deployed on any region server.
7.2021-10-18 16:36:45,259 INFO [main] util.HbaseFsck: Loading region information from HDFS ...ERROR: Orphan region in HDFS: Unable to load .regioninfo from table ns_dosp:dosp_leaderboard_online_predict_hb in hdfs dir hdfs://dospscenehdfs/hbase/data/ns_dosp/dosp_leaderboard_online_predict_hb/313cc865bc63345160e3b95fc66eadaa! It may be an invalid format or version file. Treating as an orphaned regiondir. ERROR: Orphan region in HDFS: Unable to load .regioninfo from table ns_dosp:dosp_leaderboard_online_predict_hb in hdfs dir hdfs://dospscenehdfs/hbase/data/ns_dosp/dosp_leaderboard_online_predict_hb/1b2a7f75c73d08dd543fa9fffac329f1! It may be an invalid format or version file. Treating as an orphaned regiondir. ....ERROR: Orphan region in HDFS: Unable to load .regioninfo from table ns_dosp:dosp_leaderboard_online_predict_hb in hdfs dir hdfs://dospscenehdfs/hbase/data/ns_dosp/dosp_leaderboard_online_predict_hb/82b045112283230468a2e3317f437b5e! It may be an invalid format or version file. Treating as an orphaned regiondir. ERROR: Orphan region in HDFS: Unable to load .regioninfo from table ns_dosp:dosp_leaderboard_online_predict_hb in hdfs dir hdfs://dospscenehdfs/hbase/data/ns_dosp/dosp_leaderboard_online_predict_hb/8cc8c7bb3b677d4f329d8422b106ab5f! It may be an invalid format or version file. Treating as an orphaned regiondir.
8. delete '.meta.','regionname','info:serverstartcode' delete '.meta.','regionname','info:regionserver' delete '.meta.','regionname','info:regioninfo'
9. flush '.meta.' major_compact '.meta.'