【From】https://www.iteye.com/blog/blackproof-2052898
meta表修复一
查看hbasemeta情况
hbase hbck
.重新修复hbase meta表(根据hdfs上的regioninfo文件,生成meta表)
hbase hbck -fixMeta
.重新将hbase meta表分给regionserver(根据meta表,将meta表上的region分给regionservere)
hbase hbck -fixAssignments
meta表修复二
当出现漏洞
hbase hbck -fixHdfsHoles (新建一个region文件夹)
hbase hbck -fixMeta (根据regioninfo生成meta表)
hbase hbck -fixAssignments (分配region到regionserver上)
meta表修复三
缺少regioninfo
hbase hbck -fixHdfsOrphans
hbase region 分配问题
region分不出去,可是删除 rmr /hbase/region-in-transition
hbase region 引用文件出错
Found lingering reference file hdfs:
hbase hbck -fixReferenceFiles
重复region问题:
查看meta中的region
scan 'hbase:meta' , {LIMIT=>,FILTER=>"PrefixFilter('INDEX_11')"} 在数据迁移的时候碰到两个重复的region
b0c8f08ffd7a96219f748ef14d7ad4f8,73ab00eaa7bab7bc83f440549b9749a3 删除两个重复的region delete 'hbase:meta','INDEX_11,4380_2431,1429757926776.b0c8f08ffd7a96219f748ef14d7ad4f8.','info:regioninfo' delete 'hbase:meta','INDEX_11,5479_0041431700000000040100004815E9,1429757926776.73ab00eaa7bab7bc83f440549b9749a3.','info:regioninfo' 删除两个重复的hdfs /hbase/data/default/INDEX_11/b0c8f08ffd7a96219f748ef14d7ad4f8
/hbase/data/default/INDEX_11/73ab00eaa7bab7bc83f440549b9749a3 对应的重启regionserver(只是为了刷新hmaster上汇报的RIS的状态) 肯定会丢数据,把没有上线的重复region上的数据丢失
新hbase hbck
新版的hbck 新版本的 hbck 可以修复各种错误,修复选项是:
()-fix,向下兼容用,被-fixAssignments替代
()-fixAssignments,用于修复region assignments错误
()-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。
()-fixHdfsHoles,修复region holes(空洞,某个区间没有region)问题
()-fixHdfsOrphans,修复Orphan region(hdfs上面没有.regioninfo的region)
()-fixHdfsOverlaps,修复region overlaps(区间重叠)问题
()-fixVersionFile,修复缺失hbase.version文件的问题
()-maxMerge <n> (n默认是5),当region有重叠是,需要合并region,一次合并的region数最大不超过这个值。
()-sidelineBigOverlaps ,当修复region overlaps问题时,允许跟其他region重叠次数最多的一些region不参与(修复后,可以把没有参与的数据通过bulk load加载到相应的region)
()-maxOverlapsToSideline <n> (n默认是2),当修复region overlaps问题时,一组里最多允许多少个region不参与
由于选项较多,所以有两个简写的选项
() -repair,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps
()-repairHoles,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans 新版本的 hbck
()缺失hbase.version文件
加上选项 -fixVersionFile 解决
()如果一个region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中
加上选项 -fixAssignments 解决
()如果一个region在META表中,并且在regionserver的online region集合中,但是在hdfs上面没有
加上选项 -fixAssignments -fixMeta 解决,( -fixAssignments告诉regionserver close region),( -fixMeta删除META表中region的记录)
()如果一个region在META表中没有记录,没有被regionserver服务,但是在hdfs上面有
加上选项 -fixMeta -fixAssignments 解决,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录)
()如果一个region在META表中没有记录,在hdfs上面有,被regionserver服务了
加上选项 -fixMeta 解决,在META表中添加这个region的记录,先undeploy region,后assign
()如果一个region在META表中有记录,但是在hdfs上面没有,并且没有被regionserver服务
加上选项 -fixMeta 解决,删除META表中的记录
()如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region没有被服务
加上选项 -fixAssignments 解决,assign这个region
()如果一个region在META表中有记录,在hdfs上面也有,table是disabled的,但是这个region被某个regionserver服务了
加上选项 -fixAssignments 解决,undeploy这个region
()如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region被多个regionserver服务了
加上选项 -fixAssignments 解决,通知所有regionserver close region,然后assign region
()如果一个region在META表中,在hdfs上面也有,也应该被服务,但是META表中记录的regionserver和实际所在的regionserver不相符
加上选项 -fixAssignments 解决 ()region holes
需要加上 -fixHdfsHoles ,创建一个新的空region,填补空洞,但是不assign 这个 region,也不在META表中添加这个region的相关信息
()region在hdfs上面没有.regioninfo文件
-fixHdfsOrphans 解决
()region overlaps
需要加上 -fixHdfsOverlaps 说明:
()修复region holes时,-fixHdfsHoles 选项只是创建了一个新的空region,填补上了这个区间,还需要加上-fixAssignments -fixMeta 来解决问题,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录),所以有了组合拳 -repairHoles 修复region holes,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans
() -fixAssignments,用于修复region没有assign、不应该assign、assign了多次的问题
()-fixMeta,如果hdfs上面没有,那么从META表中删除相应的记录,如果hdfs上面有,在META表中添加上相应的记录信息
()-repair 打开所有的修复选项,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps 新版本的hbck从()hdfs目录()META()RegionServer这三处获得region的Table和Region的相关信息,根据这些信息判断并repair
转meta,表手动删除表
因为集群硬盘紧俏,绝对对原来的表加上COMPRESSION=>LZO属性。但是创建表,长时间没有反馈。决定drop掉这张表,但是始终drop失败。重启集群,hbase 60010界面显示有region transaction。为创建失败的表region,在PENDING_OPEN和CLOSED之间跳。describe 表失败, enable表失败,disable表失败,从60010界面查看表失败。很蛋疼。
后决定强制删除当前表。google了一下,找到这篇文章,文章大部分都是对的,但是最后一步存在问题.原文中命令为:
delete '*Info','*Info,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:server'
当时就觉得有有问题,没有涉及.META.表,如何更新META信息?
尝试两次删除后是始终报错,确定应该是有问题,为了以防万一,google一下更新META信息的操作,将命令改为
delete '.META.','*Info,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:server'
命令成功执行。
重启集群后,transction仍然存在,分析应该是meta表没有更新的问题,对meta表做一次major_compact,重启集群,成功。不再有报错。 下面是对原文的拷贝:
强制删除表:
、强制删除该表在hdfs上的所有文件(路径根据实际情况而定):
[sql] view plaincopy ./hadoop fs -rmr /hbase/*Info
、删除该表在HBase系统表.META.中的记录:
A、首先从.META.中查询出表 *Info在.META.中的rowkey,这可以通过scan '.META.',然后手动筛选;
B、然后删除该rowkey下的3个字段(假设查询出的rowkey为*Info,,.2636b5a2b3d3d08f23d2af9582f29bd8.)
[plain] view plaincopy delete '*Info','*Info,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:server'
delete '*Info','*Info,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:serverstartcode'
delete '*Info','*Info,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:reg
转meta表修复三
一、故障原因
IP为10.191.135.3的服务器在2013年8月1日出现服务器重新启动的情况,导致此台服务器上的所有服务均停止。从而造成NTP服务停止。当NTP服务停止后,导致HBase集群中大部分机器时钟和主机时间不一致,造成regionserver服务中止。并在重新启动后,出现region的hole。需要对数据进行重新修复,以正常提供插入数据的服务。 二、恢复方式
、集群50个regionserver,宕掉服务41个,namenode所在机器10.191.135.3不明重启(原因查找中)导致本机上的namenode、zookeeper、时间同步服务器服务挂掉。
、重启hbase服务时,没能成功stop剩余的9个regionserver服务,进行了人为kill进程,
、在hdfs上移走了hlog(避免启动时split log花费过多时间影响服务),然后重启hbase。发现10.191.135.30机器上的时间与时间同步服务器10.191.135.3不同步。手工同步后重启成功。hbase可以正常提供查询服务。
、运行mapreduce put数据。抛出异常,数据无法正常插入;
、执行/opt/hbase/bin/hbase hbck -fixAssignments,尝试重新分配region。结果显示hbase有空洞,即region之间数据不连续了;
、通过上述操作可以定位是在regionserver服务宕掉的后重启的过程中丢了数据。需要进行空洞修复。然而hbase hbck命令总是只显示三条空洞。
、通过编写的regionTest.jar工具进行进一步检测出空洞所在的regionname然后停掉hbase,进而进行region合并修复空洞;
、合并的merge 操作需要先去.META.表里读取该region的信息,由于.META.表也在regionserver宕机过程中受到损坏,所以部分region的.META.信息没有,merge操作时就抛出空指针异常。因此只能将hdfs这些region进行移除,然后通过regionTest.jar 检测新的空洞所在的regionname,进行合并操作修复空洞;
、关于region重叠,即regionname存在.META.表内,但是在hdfs上被错误的移出,并进行了region合并。这种情况下需要通过regionTest.jar检测重叠的regionname然后手动去.META.表删除,.META.表修改之后需要flush;
、最后再次执行 hbase hbck 命令,hbase 所有表status ok。 三、相关命令及页面报错信息
.手工同步时间命令 service ntpd stop ntpdate -d 192.168.1.20 service ntpd start .org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed actions: WrongRegionException: times, servers with issues: datanode10:, at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:) at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:) at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:) at org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:) at org.apache.hadoop.hbase.client.HTable.put(HTable.java:) at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:) at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:) at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:) at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:) at o 3.13// :: DEBUG util.HBaseFsck: There are region info entries ERROR: There is a hole in the region chain between +8615923208069cmnet201303072132166264580 and +. 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: Deployed on: datanode14,, .META. is okay. Number of regions: Deployed on: datanode21,, cqgprs is okay. Number of regions: Deployed on: datanode1,, datanode10,, datanode11,, datanode12,, datanode13,, datanode14,, datanode15,, datanode16,, datanode17,, datanode18,, datanode19,, datanode2,, datanode20,, datanode21,, datanode22,, datanode23,, datanode24,, datanode25,, datanode26,, datanode27,, datanode28,, datanode29,, datanode3,, datanode30,, datanode31,, datanode32,, datanode33,, datanode34,, datanode35,, datanode36,, datanode37,, datanode38,, datanode39,, datanode4,, datanode40,, datanode41,, datanode42,, datanode43,, datanode44,, datanode45,, datanode46,, datanode47,, datanode48,, datanode49,, datanode5,, datanode50,, datanode6,, datanode7,, datanode8,, datanode9,, test1 is okay. Number of regions: Deployed on: datanode43,, test2 is okay. Number of regions: Deployed on: datanode21,, inconsistencies detected. Status: INCONSISTENT .hadoop jar regionTest.jar com.region.RegionReaderMain /hbase/cqgprs 检测cqgprs表里的空洞所在的regionname。 .================================== first endKey = +8615808059207cmnet201307102326567966800 second startKey = +8615808058578cmnet201212251545557984830 first regionNmae = cqgprs,+8615808058578cmnet201212251545557984830,.0f8266ad7ac45be1fa7233e8ea7aeef9. second regionNmae = cqgprs,+8615808058578cmnet201212251545557984830,.3552d3db8166f421047525d6be39c22e. ================================== first endKey = +8615808060140cmnet201303051801355846850 second startKey = +8615808059207cmnet201307102326567966800 first regionNmae = cqgprs,+8615808058578cmnet201212251545557984830,.3552d3db8166f421047525d6be39c22e. second regionNmae = cqgprs,+8615808059207cmnet201307102326567966800,.09d489d3df513bc79bab09cec36d2bb4. ================================== .Usage: bin/hbase org.apache.hadoop.hbase.util.Merge [-Dfs.default.name=hdfs://nn:port] <table-name> <region-1> <region-2> ./hbase org.apache.hadoop.hbase.util.Merge -Dfs.defaultFS=hdfs://bdpha cqgprs cqgprs,+8615213741567cmnet201305251243290802280,1369877465524.3c13b460fae388b1b1a70650b66c5039. cqgprs,+8615213745577cmnet201302141725552206710,1369534940433.5de80f59071555029ac42287033a4863. & 7.13// :: WARN util.HBaseFsck: Naming new problem group: +8618225125357cmnet201212290358070667800 ERROR: (regions cqgprs,+8618225123516cmnet201304131404096748520,.b3cf5cc752f4427a4e699270dff9839e. and cqgprs,+8618225125357cmnet201212290358070667800,.7f7038bfbe2c0df0998a529686a3e1aa.) There is an overlap in the region chain. // :: WARN util.HBaseFsck: reached end of problem group: +8618225127504cmnet201302182135452100210 // :: WARN util.HBaseFsck: Naming new problem group: +8618285642723cmnet201302031921019768070 ERROR: (regions cqgprs,+8618285277826cmnet201306170027424674330,.9d1e93b22cec90fd75361fa65b1d20d2. and cqgprs,+8618285642723cmnet201302031921019768070,.f631cd8c6acc5e711e651d13536abe94.) There is an overlap in the region chain. // :: WARN util.HBaseFsck: reached end of problem group: +8618286275556cmnet201212270713444340110 // :: WARN util.HBaseFsck: Naming new problem group: +8618323968833cmnet201306010239025175240 ERROR: (regions cqgprs,+8618323967956cmnet201306091923411365860,.665dba6a14ebc9971422b39e079b00ae. and cqgprs,+8618323968833cmnet201306010239025175240,.6d2fecc1b3f9049bbca83d84231eb365.) There is an overlap in the region chain. // :: WARN util.HBaseFsck: reached end of problem group: +8618323992353cmnet201306012336364819810 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. // :: WARN util.HBaseFsck: Naming new problem group: +8618723686187cmnet201301191433522129820 ERROR: (regions cqgprs,+8618723683087cmnet201301300708363045080,.4ee5787217c1da4895d95b3b92b8e3a2. and cqgprs,+8618723686187cmnet201301191433522129820,.70b48899cc753a0036f11bb27d2194f9.) There is an overlap in the region chain. // :: WARN util.HBaseFsck: reached end of problem group: +8618723689138cmnet201301051742388948390 // :: WARN util.HBaseFsck: Naming new problem group: +8618723711808cmnet201301031139206225900 ERROR: (regions cqgprs,+8618723710003cmnet201301250809235976320,.40eed10648c9a43e3d5ce64e9d63fe00. and cqgprs,+8618723711808cmnet201301031139206225900,.ebc442e02f5e784bce373538e06dd232.) There is an overlap in the region chain. // :: WARN util.HBaseFsck: reached end of problem group: +8618723714626cmnet201302122009459491970 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. . delete '.META.','regionname','info:serverstartcode'
delete '.META.','regionname','info:regionserver'
delete '.META.','regionname','info:regioninfo' . flush '.META.' major_compact '.META.'