hbase1.xx版本出现元数据不一致情况处理

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(3RegionServer这三处获得region的TableRegion
的相关信息,根据这些信息判断并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.' 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值