1:hbase元数据一致性
一致性是指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> (n默认是5),当region有重叠,需要合并region,单次合并的region数不超过这个值。
(9)-sidelineBigOverlaps ,当修复region overlaps问题时,允许跟其他region重叠次数最多的一些
region不参与(修复后,可以把没有参与的数据通过bulk load加载到相应的region)
(10)-maxOverlapsToSideline <n> (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.'