精华内容
下载资源
问答
  • hbase表修复

    千次阅读 2016-12-09 14:59:35
    meta修复一 ...1.重新修复hbase meta(根据hdfs上的regioninfo文件,生成meta)  hbase hbck -fixMeta  2.重新将hbase meta分给regionserver(根据meta,将meta上的region分给regionserv

    meta表修复一

    Java代码   收藏代码
    1. 查看hbasemeta情况  
    2. hbase hbck  
    3. 1.重新修复hbase meta表(根据hdfs上的regioninfo文件,生成meta表)  
    4. hbase hbck -fixMeta  
    5. 2.重新将hbase meta表分给regionserver(根据meta表,将meta表上的region分给regionservere)  
    6. hbase hbck -fixAssignments  

     

    meta表修复二

     

    Java代码   收藏代码
    1. 当出现漏洞  
    2. hbase hbck -fixHdfsHoles  (新建一个region文件夹)  
    3. hbase hbck <span style="font-size: 13.63636302948px; line-height: 19.0909080505371px;">-fixMeta        (根据regioninfo生成meta表)  
    4. hbase hbck </span><span style="font-size: 13.63636302948px; line-height: 19.0909080505371px;">-fixAssignments  (分配region到regionserver上)</span>  
    meta表修复三
    Java代码   收藏代码
    1. 缺少regioninfo  
    2. hbase hbck -fixHdfsOrphans  

    hbase region 分配问题

    Java代码   收藏代码
    1. region分不出去,可是删除 rmr /hbase/region-in-transition  

     

    hbase region 引用文件出错

    Java代码   收藏代码
    1. Found lingering reference file hdfs:  
    2. hbase hbck -fixReferenceFiles   

      

     

     

    重复region问题:

    Java代码   收藏代码
    1. 查看meta中的region  
    2. scan 'hbase:meta' , {LIMIT=>10,FILTER=>"PrefixFilter('INDEX_11')"}  
    3.   
    4. 在数据迁移的时候碰到两个重复的region  
    5. b0c8f08ffd7a96219f748ef14d7ad4f8,73ab00eaa7bab7bc83f440549b9749a3  
    6.   
    7. 删除两个重复的region  
    8.   
    9. delete 'hbase:meta','INDEX_11,4380_2431,1429757926776.b0c8f08ffd7a96219f748ef14d7ad4f8.','info:regioninfo'  
    10.   
    11. delete 'hbase:meta','INDEX_11,5479_0041431700000000040100004815E9,1429757926776.73ab00eaa7bab7bc83f440549b9749a3.','info:regioninfo'  
    12.   
    13. 删除两个重复的hdfs  
    14.   
    15. /hbase/data/default/INDEX_11/b0c8f08ffd7a96219f748ef14d7ad4f8  
    16. /hbase/data/default/INDEX_11/73ab00eaa7bab7bc83f440549b9749a3  
    17.   
    18. 对应的重启regionserver(只是为了刷新hmaster上汇报的RIS的状态)  
    19.   
    20. 肯定会丢数据,把没有上线的重复region上的数据丢失  

     

    新hbase hbck

    Java代码   收藏代码
    1. 新版的hbck  
    2.    
    3. 新版本的 hbck 可以修复各种错误,修复选项是:   
    4. 1)-fix,向下兼容用,被-fixAssignments替代   
    5. 2)-fixAssignments,用于修复region assignments错误   
    6. 3)-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。   
    7. 4)-fixHdfsHoles,修复region holes(空洞,某个区间没有region)问题   
    8. 5)-fixHdfsOrphans,修复Orphan region(hdfs上面没有.regioninfo的region)   
    9. 6)-fixHdfsOverlaps,修复region overlaps(区间重叠)问题   
    10. 7)-fixVersionFile,修复缺失hbase.version文件的问题   
    11. 8)-maxMerge <n> (n默认是5),当region有重叠是,需要合并region,一次合并的region数最大不超过这个值。   
    12. 9)-sidelineBigOverlaps ,当修复region overlaps问题时,允许跟其他region重叠次数最多的一些region不参与(修复后,可以把没有参与的数据通过bulk load加载到相应的region)   
    13. 10)-maxOverlapsToSideline <n> (n默认是2),当修复region overlaps问题时,一组里最多允许多少个region不参与   
    14. 由于选项较多,所以有两个简写的选项   
    15. 11) -repair,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps   
    16. 12)-repairHoles,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans   
    17.    
    18.    
    19.    
    20. 新版本的 hbck   
    21. 1)缺失hbase.version文件   
    22.  加上选项 -fixVersionFile 解决   
    23. 2)如果一个region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中   
    24.  加上选项 -fixAssignments 解决   
    25. 3)如果一个region在META表中,并且在regionserver的online region集合中,但是在hdfs上面没有   
    26.  加上选项 -fixAssignments -fixMeta 解决,( -fixAssignments告诉regionserver close region),( -fixMeta删除META表中region的记录)   
    27. 4)如果一个region在META表中没有记录,没有被regionserver服务,但是在hdfs上面有   
    28. 加上选项 -fixMeta -fixAssignments 解决,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录)   
    29. 5)如果一个region在META表中没有记录,在hdfs上面有,被regionserver服务了   
    30. 加上选项 -fixMeta 解决,在META表中添加这个region的记录,先undeploy region,后assign   
    31. 6)如果一个region在META表中有记录,但是在hdfs上面没有,并且没有被regionserver服务   
    32. 加上选项 -fixMeta 解决,删除META表中的记录   
    33. 7)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region没有被服务   
    34. 加上选项 -fixAssignments 解决,assign这个region   
    35. 8)如果一个region在META表中有记录,在hdfs上面也有,table是disabled的,但是这个region被某个regionserver服务了   
    36. 加上选项 -fixAssignments 解决,undeploy这个region   
    37. 9)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region被多个regionserver服务了   
    38. 加上选项 -fixAssignments 解决,通知所有regionserver close region,然后assign region   
    39. 10)如果一个region在META表中,在hdfs上面也有,也应该被服务,但是META表中记录的regionserver和实际所在的regionserver不相符   
    40. 加上选项 -fixAssignments 解决   
    41.    
    42. 11)region holes   
    43. 需要加上 -fixHdfsHoles ,创建一个新的空region,填补空洞,但是不assign 这个 region,也不在META表中添加这个region的相关信息   
    44. 12)region在hdfs上面没有.regioninfo文件   
    45. -fixHdfsOrphans 解决   
    46. 13)region overlaps   
    47. 需要加上 -fixHdfsOverlaps   
    48.    
    49.    
    50. 说明:   
    51. 1)修复region holes时,-fixHdfsHoles 选项只是创建了一个新的空region,填补上了这个区间,还需要加上-fixAssignments -fixMeta 来解决问题,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录),所以有了组合拳 -repairHoles 修复region holes,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans   
    52. 2) -fixAssignments,用于修复region没有assign、不应该assign、assign了多次的问题   
    53. 3)-fixMeta,如果hdfs上面没有,那么从META表中删除相应的记录,如果hdfs上面有,在META表中添加上相应的记录信息   
    54. 4)-repair 打开所有的修复选项,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps   
    55.    
    56. 新版本的hbck从(1)hdfs目录(2)META(3)RegionServer这三处获得region的Table和Region的相关信息,根据这些信息判断并repair  

     

     

    转meta,表手动删除表

    Java代码   收藏代码
    1. 因为集群硬盘紧俏,绝对对原来的表加上COMPRESSION=>LZO属性。但是创建表,长时间没有反馈。决定drop掉这张表,但是始终drop失败。重启集群,hbase 60010界面显示有region transaction。为创建失败的表region,在PENDING_OPEN和CLOSED之间跳。describe 表失败, enable表失败,disable表失败,从60010界面查看表失败。很蛋疼。  
    2. 后决定强制删除当前表。google了一下,找到这篇文章,文章大部分都是对的,但是最后一步存在问题.原文中命令为:  
    3. delete 'TrojanInfo','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:server'    
    4. 当时就觉得有有问题,没有涉及.META.表,如何更新META信息?  
    5. 尝试两次删除后是始终报错,确定应该是有问题,为了以防万一,google一下更新META信息的操作,将命令改为  
    6. delete '.META.','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:server'  
    7. 命令成功执行。  
    8. 重启集群后,transction仍然存在,分析应该是meta表没有更新的问题,对meta表做一次major_compact,重启集群,成功。不再有报错。  
    9.   
    10. 下面是对原文的拷贝:  
    11. 强制删除表:  
    12.     1、强制删除该表在hdfs上的所有文件(路径根据实际情况而定):  
    13. [sql] view plaincopy  
    14.   
    15. ./hadoop fs -rmr /hbase/TrojanInfo    
    16.     2、删除该表在HBase系统表.META.中的记录:  
    17.         A、首先从.META.中查询出表 TrojanInfo在.META.中的rowkey,这可以通过scan '.META.',然后手动筛选;  
    18.      B、然后删除该rowkey下的3个字段(假设查询出的rowkey为TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.)                    
    19. [plain] view plaincopy  
    20.   
    21. delete 'TrojanInfo','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:server'    
    22. delete 'TrojanInfo','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:serverstartcode'    
    23. delete 'TrojanInfo','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:reg  
    24.    

     

     

     

    转meta表修复三

    Java代码   收藏代码
    1. 一、故障原因  
    2. IP为10.191.135.3的服务器在201381日出现服务器重新启动的情况,导致此台服务器上的所有服务均停止。从而造成NTP服务停止。当NTP服务停止后,导致HBase集群中大部分机器时钟和主机时间不一致,造成regionserver服务中止。并在重新启动后,出现region的hole。需要对数据进行重新修复,以正常提供插入数据的服务。  
    3.   
    4. 二、恢复方式  
    5. 1、集群50个regionserver,宕掉服务41个,namenode所在机器10.191.135.3不明重启(原因查找中)导致本机上的namenode、zookeeper、时间同步服务器服务挂掉。  
    6. 2、重启hbase服务时,没能成功stop剩余的9个regionserver服务,进行了人为kill进程,  
    7. 3、在hdfs上移走了hlog(避免启动时split log花费过多时间影响服务),然后重启hbase。发现10.191.135.30机器上的时间与时间同步服务器10.191.135.3不同步。手工同步后重启成功。hbase可以正常提供查询服务。  
    8. 4、运行mapreduce put数据。抛出异常,数据无法正常插入;  
    9. 5、执行/opt/hbase/bin/hbase hbck -fixAssignments,尝试重新分配region。结果显示hbase有空洞,即region之间数据不连续了;  
    10. 6、通过上述操作可以定位是在regionserver服务宕掉的后重启的过程中丢了数据。需要进行空洞修复。然而hbase hbck命令总是只显示三条空洞。  
    11. 7、通过编写的regionTest.jar工具进行进一步检测出空洞所在的regionname然后停掉hbase,进而进行region合并修复空洞;  
    12. 8、合并的merge 操作需要先去.META.表里读取该region的信息,由于.META.表也在regionserver宕机过程中受到损坏,所以部分region的.META.信息没有,merge操作时就抛出空指针异常。因此只能将hdfs这些region进行移除,然后通过regionTest.jar 检测新的空洞所在的regionname,进行合并操作修复空洞;  
    13. 9、关于region重叠,即regionname存在.META.表内,但是在hdfs上被错误的移出,并进行了region合并。这种情况下需要通过regionTest.jar检测重叠的regionname然后手动去.META.表删除,.META.表修改之后需要flush;  
    14. 10、最后再次执行 hbase hbck 命令,hbase 所有表status ok。  
    15.   
    16. 三、相关命令及页面报错信息  
    17. 1.手工同步时间命令
service ntpd stop
ntpdate -d 192.168.1.20
service ntpd start  
    18.   
    19.   
    20. 2.org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 2 actions: WrongRegionException: 2 times, servers with issues: datanode10:60020, 
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:1641)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1409)
at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:949)
at org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:826)
at org.apache.hadoop.hbase.client.HTable.put(HTable.java:801)
at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:123)
at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:84)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:533)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:88)
at o  
    21.   
    22. 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 datanode11,60020,1375330955736 datanode12,60020,1375330955993 datanode13,60020,1375330955951 datanode14,60020,1375330955915 datanode15,60020,1375330955882 datanode16,60020,1375330955892 datanode17,60020,1375330955864 datanode18,60020,1375330955703 datanode19,60020,1375330955910 datanode2,60020,1375330955751 datanode20,60020,1375330955849 datanode21,60020,1375330955825 datanode22,60020,1375334479752 datanode23,60020,1375330955835 datanode24,60020,1375330955932 datanode25,60020,1375330955856 datanode26,60020,1375330955807 datanode27,60020,1375330955882 datanode28,60020,1375330955785 datanode29,60020,1375330955799 datanode3,60020,1375330955778 datanode30,60020,1375330955748 datanode31,60020,1375330955877 datanode32,60020,1375330955763 datanode33,60020,1375330955755 datanode34,60020,1375330955713 datanode35,60020,1375330955768 datanode36,60020,1375330955896 datanode37,60020,1375330955884 datanode38,60020,1375330955918 datanode39,60020,1375330955881 datanode4,60020,1375330955826 datanode40,60020,1375330955770 datanode41,60020,1375330955824 datanode42,60020,1375449245386 datanode43,60020,1375330955880 datanode44,60020,1375330955902 datanode45,60020,1375330955881 datanode46,60020,1375330955841 datanode47,60020,1375330955790 datanode48,60020,1375330955848 datanode49,60020,1375330955849 datanode5,60020,1375330955880 datanode50,60020,1375330955802 datanode6,60020,1375330955753 datanode7,60020,1375330955890 datanode8,60020,1375330955967 datanode9,60020,1375330955948
  test1 is okay.
    Number of regions: 1
    Deployed on:  datanode43,60020,1375330955880
  test2 is okay.
    Number of regions: 1
    Deployed on:  datanode21,60020,137533095582535 inconsistencies detected.
Status: INCONSISTENT  
    23.   
    24. 4.hadoop jar regionTest.jar com.region.RegionReaderMain /hbase/cqgprs 检测cqgprs表里的空洞所在的regionname。  
    25.   
    26. 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.
==================================  
    27.   
    28. 6.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. &  
    29.   
    30. 7.13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618225125357cmnet201212290358070667800
ERROR: (regions cqgprs,+8618225123516cmnet201304131404096748520,1375363774655.b3cf5cc752f4427a4e699270dff9839e. and cqgprs,+8618225125357cmnet201212290358070667800,1364421610707.7f7038bfbe2c0df0998a529686a3e1aa.) There is an overlap in the region chain.
13/08/01 22:24:02 WARN util.HBaseFsck: reached end of problem group: +8618225127504cmnet201302182135452100210
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618285642723cmnet201302031921019768070
ERROR: (regions cqgprs,+8618285277826cmnet201306170027424674330,1375363962312.9d1e93b22cec90fd75361fa65b1d20d2. and cqgprs,+8618285642723cmnet201302031921019768070,1360873307626.f631cd8c6acc5e711e651d13536abe94.) There is an overlap in the region chain.
13/08/01 22:24:02 WARN util.HBaseFsck: reached end of problem group: +8618286275556cmnet201212270713444340110
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618323968833cmnet201306010239025175240
ERROR: (regions cqgprs,+8618323967956cmnet201306091923411365860,1375364143678.665dba6a14ebc9971422b39e079b00ae. and cqgprs,+8618323968833cmnet201306010239025175240,1372821719159.6d2fecc1b3f9049bbca83d84231eb365.) There is an overlap in the region chain.
13/08/01 22:24:02 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.
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618723686187cmnet201301191433522129820
ERROR: (regions cqgprs,+8618723683087cmnet201301300708363045080,1375364411992.4ee5787217c1da4895d95b3b92b8e3a2. and cqgprs,+8618723686187cmnet201301191433522129820,1362003066106.70b48899cc753a0036f11bb27d2194f9.) There is an overlap in the region chain.
13/08/01 22:24:02 WARN util.HBaseFsck: reached end of problem group: +8618723689138cmnet201301051742388948390
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618723711808cmnet201301031139206225900
ERROR: (regions cqgprs,+8618723710003cmnet201301250809235976320,1375364586329.40eed10648c9a43e3d5ce64e9d63fe00. and cqgprs,+8618723711808cmnet201301031139206225900,1361216401798.ebc442e02f5e784bce373538e06dd232.) There is an overlap in the region chain.
13/08/01 22:24:02 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.  
    31.   
    32. 8.  delete '.META.','regionname','info:serverstartcode'  
    33. delete '.META.','regionname','info:regionserver'  
    34. delete '.META.','regionname','info:regioninfo'  
    35.    
    36. 9. flush '.META.'
major_compact '.META.'  

     

    展开全文
  • hbase 修复 hbase hbck

    万次阅读 2016-12-14 14:40:18
    hbase hbck 新版本的 hbck 可以修复各种错误,修复选项是: (1)-fix,向下兼容用,被-...(3)-fixMeta,用于修复meta的问题,前提是HDFS上面的region info信息有并且正确。 (4)-fixHdfsHoles,修

    hbase hbck

    新版本的 hbck 可以修复各种错误,修复选项是:   
    (1)-fix,向下兼容用,被-fixAssignments替代   
    (2)-fixAssignments,用于修复region assignments错误   
    (3)-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。   
    (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   
       
       
       
    新版本的 hbck   
    (1)缺失hbase.version文件   
     加上选项 -fixVersionFile 解决   
    (2)如果一个region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中   
     加上选项 -fixAssignments 解决   
    (3)如果一个region在META表中,并且在regionserver的online region集合中,但是在hdfs上面没有   
     加上选项 -fixAssignments -fixMeta 解决,( -fixAssignments告诉regionserver close region),( -fixMeta删除META表中region的记录)   
    (4)如果一个region在META表中没有记录,没有被regionserver服务,但是在hdfs上面有   
    加上选项 -fixMeta -fixAssignments 解决,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录)   
    (5)如果一个region在META表中没有记录,在hdfs上面有,被regionserver服务了   
    加上选项 -fixMeta 解决,在META表中添加这个region的记录,先undeploy region,后assign   
    (6)如果一个region在META表中有记录,但是在hdfs上面没有,并且没有被regionserver服务   
    加上选项 -fixMeta 解决,删除META表中的记录   
    (7)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region没有被服务   
    加上选项 -fixAssignments 解决,assign这个region   
    (8)如果一个region在META表中有记录,在hdfs上面也有,table是disabled的,但是这个region被某个regionserver服务了   
    加上选项 -fixAssignments 解决,undeploy这个region   
    (9)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region被多个regionserver服务了   
    加上选项 -fixAssignments 解决,通知所有regionserver close region,然后assign region   
    (10)如果一个region在META表中,在hdfs上面也有,也应该被服务,但是META表中记录的regionserver和实际所在的regionserver不相符   
    加上选项 -fixAssignments 解决   
       
    (11)region holes   
    需要加上 -fixHdfsHoles ,创建一个新的空region,填补空洞,但是不assign 这个 region,也不在META表中添加这个region的相关信息   
    (12)region在hdfs上面没有.regioninfo文件   
    -fixHdfsOrphans 解决   
    (13)region overlaps   
    需要加上 -fixHdfsOverlaps   
       
       
    说明:   
    (1)修复region holes时,-fixHdfsHoles 选项只是创建了一个新的空region,填补上了这个区间,还需要加上-fixAssignments -fixMeta 来解决问题,( -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上)


    一、故障原因  
    IP为10.191.135.3的服务器在2013年8月1日出现服务器重新启动的情况,导致此台服务器上的所有服务均停止。从而造成NTP服务停止。当NTP服务停止后,导致HBase集群中大部分机器时钟和主机时间不一致,造成regionserver服务中止。并在重新启动后,出现region的hole。需要对数据进行重新修复,以正常提供插入数据的服务。  
      
    二、恢复方式  
    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。  
      
    三、相关命令及页面报错信息  
    1.手工同步时间命令
service ntpd stop
ntpdate -d 192.168.1.20
service ntpd start  
      
      
    2.org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 2 actions: WrongRegionException: 2 times, servers with issues: datanode10:60020, 
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:1641)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1409)
at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:949)
at org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:826)
at org.apache.hadoop.hbase.client.HTable.put(HTable.java:801)
at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:123)
at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:84)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:533)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:88)
at o  
      
    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 datanode11,60020,1375330955736 datanode12,60020,1375330955993 datanode13,60020,1375330955951 datanode14,60020,1375330955915 datanode15,60020,1375330955882 datanode16,60020,1375330955892 datanode17,60020,1375330955864 datanode18,60020,1375330955703 datanode19,60020,1375330955910 datanode2,60020,1375330955751 datanode20,60020,1375330955849 datanode21,60020,1375330955825 datanode22,60020,1375334479752 datanode23,60020,1375330955835 datanode24,60020,1375330955932 datanode25,60020,1375330955856 datanode26,60020,1375330955807 datanode27,60020,1375330955882 datanode28,60020,1375330955785 datanode29,60020,1375330955799 datanode3,60020,1375330955778 datanode30,60020,1375330955748 datanode31,60020,1375330955877 datanode32,60020,1375330955763 datanode33,60020,1375330955755 datanode34,60020,1375330955713 datanode35,60020,1375330955768 datanode36,60020,1375330955896 datanode37,60020,1375330955884 datanode38,60020,1375330955918 datanode39,60020,1375330955881 datanode4,60020,1375330955826 datanode40,60020,1375330955770 datanode41,60020,1375330955824 datanode42,60020,1375449245386 datanode43,60020,1375330955880 datanode44,60020,1375330955902 datanode45,60020,1375330955881 datanode46,60020,1375330955841 datanode47,60020,1375330955790 datanode48,60020,1375330955848 datanode49,60020,1375330955849 datanode5,60020,1375330955880 datanode50,60020,1375330955802 datanode6,60020,1375330955753 datanode7,60020,1375330955890 datanode8,60020,1375330955967 datanode9,60020,1375330955948
  test1 is okay.
    Number of regions: 1
    Deployed on:  datanode43,60020,1375330955880
  test2 is okay.
    Number of regions: 1
    Deployed on:  datanode21,60020,1375330955825
35 inconsistencies detected.
Status: INCONSISTENT  
      
    4.hadoop jar regionTest.jar com.region.RegionReaderMain /hbase/cqgprs 检测cqgprs表里的空洞所在的regionname。  
      
    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.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/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618225125357cmnet201212290358070667800
ERROR: (regions cqgprs,+8618225123516cmnet201304131404096748520,1375363774655.b3cf5cc752f4427a4e699270dff9839e. and cqgprs,+8618225125357cmnet201212290358070667800,1364421610707.7f7038bfbe2c0df0998a529686a3e1aa.) There is an overlap in the region chain.
13/08/01 22:24:02 WARN util.HBaseFsck: reached end of problem group: +8618225127504cmnet201302182135452100210
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618285642723cmnet201302031921019768070
ERROR: (regions cqgprs,+8618285277826cmnet201306170027424674330,1375363962312.9d1e93b22cec90fd75361fa65b1d20d2. and cqgprs,+8618285642723cmnet201302031921019768070,1360873307626.f631cd8c6acc5e711e651d13536abe94.) There is an overlap in the region chain.
13/08/01 22:24:02 WARN util.HBaseFsck: reached end of problem group: +8618286275556cmnet201212270713444340110
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618323968833cmnet201306010239025175240
ERROR: (regions cqgprs,+8618323967956cmnet201306091923411365860,1375364143678.665dba6a14ebc9971422b39e079b00ae. and cqgprs,+8618323968833cmnet201306010239025175240,1372821719159.6d2fecc1b3f9049bbca83d84231eb365.) There is an overlap in the region chain.
13/08/01 22:24:02 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.
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618723686187cmnet201301191433522129820
ERROR: (regions cqgprs,+8618723683087cmnet201301300708363045080,1375364411992.4ee5787217c1da4895d95b3b92b8e3a2. and cqgprs,+8618723686187cmnet201301191433522129820,1362003066106.70b48899cc753a0036f11bb27d2194f9.) There is an overlap in the region chain.
13/08/01 22:24:02 WARN util.HBaseFsck: reached end of problem group: +8618723689138cmnet201301051742388948390
13/08/01 22:24:02 WARN util.HBaseFsck: Naming new problem group: +8618723711808cmnet201301031139206225900
ERROR: (regions cqgprs,+8618723710003cmnet201301250809235976320,1375364586329.40eed10648c9a43e3d5ce64e9d63fe00. and cqgprs,+8618723711808cmnet201301031139206225900,1361216401798.ebc442e02f5e784bce373538e06dd232.) There is an overlap in the region chain.
13/08/01 22:24:02 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.  
      
    8.  delete '.META.','regionname','info:serverstartcode'  
    delete '.META.','regionname','info:regionserver'  
    delete '.META.','regionname','info:regioninfo'  
       
    9. flush '.META.'
major_compact '.META.' 



    展开全文
  • 转载自| HBase技术社区微信号 | hbasegroup最近知识星球有人问浪尖,自己的hbase集群元数据丢失了,但是数据还在,是否能够修复,其实这种情况下利用数据的hfile去...

    转载自 | HBase技术社区

    微信号 | hbasegroup 

    最近知识星球有人问浪尖,自己的hbase集群元数据丢失了,但是数据还在,是否能够修复,其实这种情况下利用数据的hfile去修复元数据很常见,也有很多时候我们是生成hfile加载进hbase。

    那么他又问了,假设数据也丢失了,或者数据存在大量坏块,是否能进行修复。首先要先修复坏块,一本有副本,假设不是所有数据副本一起损坏,通过清除坏块,修复副本,然后再逆向修复hbase的元数据也是可行的。但是如果清除坏块之后数据丢了,那也可以修复hbase元数据,只是丢了数据而已。

    HBase中的元数据表中记录了Region的路由信息,如果元数据被损坏,将会影响正常的HBase读写业务,而元数据被损坏的问题时有发生,这篇文章介绍了如何进行元数据逆向修复的原理与操作。

    在实际的HBase运维中,会碰到各色各样的问题,如RegionServer异常退出,重启进程很慢,Region长时间处于RIT状态等等,为了帮助大部分读者提供HBase的运维能力,后续会针对"HBase运维专题"写一系列文章,欢迎大家关注社区公众号最新动态。

    本文整体思路如下:

    1. HBase目录结构

    2. HBase数据文件

    3. HBase元数据表结构

    4. 元数据逆向修复原理

    5. 如何利用HBase提供的工具进行修复

    本文内容基于HBase 1.x版本。

    HBase目录结构

    HBase在HDFS上使用一个独立的目录作为HBase文件目录的根目录,通常为"/hbase",该目录结构布局如下:

    /hbase/archive

    进行snapshot或者升级的时候使用到的归档目录。Compaction删除HFile的时候,也会把旧的HFile归档到这里。

    /hbase/corrupt

    splitlog的corrupt目录,以及corrupt hfile的目录。

    /hbase/data/default/[TableName]/.tabledesc/.tableinfo.0000000001

    表的基本属性信息元文件tableinfo。

    /hbase/data/default/[TableName]/[RegionName]/info/[HFileName]

    对应表下的hfile数据文件。

    /hbase/data/default/[TableName]/[RegionName]/recovered.edits/340.seqid

    当splitlog发生时,一个RS的wal会按照region级别split WALs写到对应目录下的的recovered.edits目录上,使得此region再次被open的时候,回放这些recovered.edits日志。

    /hbase/data/default/[TableName]/[RegionName]/.regioninfo

    regioninfo文件。

    /hbase/data/default/[TableName]/[RegionName]/.tmp

    compaction等的临时tmp目录。

    /hbase/data/default/[TableName]/[RegionName]/.splits

    Region split操作的临时目录,如果上次region的split没有完成被中断了,这个region再open的时候会自动清理这个目录,一般不需要人工干预。

    /hbase/data/default/[TableName]/[RegionName]/.merges

    merges时的临时目录,和split一样,如果没有正常完成的时候被中断了,那么它会在下次被open的时候自动被清理,一般不需要人工干预。

    /hbase/data/hbase/acl

    acl开启HBase权限控制时的权限记录系统表。

    /hbase/data/hbase/meta

    元数据表,记录region相关信息。

    /hbase/hbase.id

    集群启动初始化的时候,创建的集群唯一id。可以重新fix生成。

    /hbase/hbase.version

    HBase软件版本文件,代码静态版本。

    /hbase/MasterProcWALs

    master执行过程程序的状态保存,用于中断恢复执行使用。

    /hbase/oldWALs

    oldWALs历史wal,即wal记录的数据已经确认持久化了,那么这些wal就会被移到这里。splitlog完成的那些旧日志,也会被放到这里。

    /hbase/.tmp

    tmp临时辅助目录,比如写一个hbase.id文件,在这里写成功后,rename到 /hbase/hbase.id

    /hbase/.trashtables/data

    当truncate table或者delete table的时候,这些数据会临时存放在这里,默认1小时内被清理

    /hbase/WALs/[RegionServerName]/[WALFileName]

    记录着一台RegionServer上的WAL日志文件。可以看到它是regionserver名字是有时间的,即下一次启动时RS的wal目录就会使用新的目录结构存放wal,这个旧的RS wal目录就会被splitlog过程拆分回放。

    HBase数据文件

    HBase在HDFS上存放的数据文件,包括:

    HFile

    数据文件,目前最高版本也是默认常用版本为3。HFile文件结构细节可以参考官网http://hbase.apache.org/book.html#_hfile_format_2。我们这里逆向生成元数据主要使用到了HFile Fileinfo中的的{firstkey、lastkey}信息。

    hfilelink

    在hbase snapshot时用到, migration upgrade 也会使用到。很少碰到这类文件的运维问题,这里不作过多介绍。

    reference

    用来指定half hfile,一个region有reference文件时,这个region不能执行split操作。split/merge会创建这类文件。进行compaction后生成新的hfile后,会把对应的reference文件删除。

    HFile的reference文件名格式一般为hfile.parentEncodeRegion。

    如:/hbase/data/default/table/region-one/family/hfilename

    其region-two有reference hfile文件名格式为:

    /hbase/data/default/table/region-two/family/hfile.region-one 

    通常无效引用就是region-one的hfile不存在了,那么这个引用就会失效,具体的修复方法一般是把reference无效的引用移除。

    .regioninfo

    包含Region的{endkey, offline标志, regionid, regionName, split标志, startkey, tablename}等信息。

    tableinfo

    包含{TableName, Table属性信息, Table级别Config信息, ColumnFamily信息}。

    其中ColumnFamily信息包含{FamliyName, Family属性, Family级别config信息}等。

    常见的表属性包括:

    {REGION_MEMSTORE_REPLICATION,PRIORITY,IS_ROOT_KEY,...}。

    列族属性包括:

    {BLOCKSIZE,TTL,REPLICATION_SCOPE,COMPRESSION, BLOCK_ENCODING,...}。

    HBase元数据表格式定义

    HBase元数据的完整名称为"hbase:meta",其中,"hbase"为元数据表所在的NameSpace名称。每一个Region的信息在元数据表中都以独立的行存在,这一行数据的格式定义如下:

    RowKey:[RegionName]

    Qualifier:info:regioninfo

        RegionInfo的EncodeValue值

    Qualifier:info:seqnumDuringOpen

        序列号

    Qualifier:info:server

        Region所在的RegionServer名称

    Qualifier:info:serverstartcode

        Regionserver启动时的Timestamp

    元数据逆向修复原理

    上述介绍的数据文件中,HBase的元数据主要由meta表tableinforegioninfo构成。这里的逆向生成元数据主要是指:根据HFile数据文件,反向生成regioninfo/tableinfo/meta表的过程。

    1. 逆向生成tableinfo文件

    Case 1:通过从Master进程内存中的tabledescritor cache 完整恢复tableinfo文件,此时恢复的tableinfo是完整的,和之前的完全一样。

    Case 2:当cache中没有加载过此表的tableinfo时,修复过程只能从表的目录结构list所有familyNames来恢复tableinfo,这个时候只能得到的是列族的名字,恢复tableinfo文件内容中,除了表名、列族名一致,其它属性均采用默认值。这个时候如果运维人员知道有什么属性是自定义进去的,那么就需要要手动再次添加进去。

    2.  逆向生成regioninfo文件

    HFile中的fileinfo读取{firstkey,lastkey},排序后得到Region下所有HFile的最大rowkey和最小rowkey,并根据tableinfo中的表名完整恢复Regioninfo文件。

    这里只能恢复{表名,startkey,endkey},  其它属性如:{offline标志, regionName, split标志, hashcode}等均使用代码重新生成或使用配置默认值。

    3. 逆向填充meta表行

    regioninfo文件序列化,填入meta表 info:regioninfo 列,并同时写入默认的server,等它被再次open的时候,重新分配region到实际的regionserver上,并更新这里的数据行。

    逆向工程除了上面的数据文件、数据内容修复外,还涉及到数据的完整性等其它方面修复。一个表是由无穷小的rowkey到无穷大的rowkey范围组成,还可能会发生的问题如:Region空洞、Region重叠现象,如:

    如果有Region空洞的时候,就会使用他们的空洞边界作为startkey/endkey,再修复创建一个Region目录及目录下的regioninfo文件。如果是Region重叠,则会把重叠的Region进行合并,取所有Region的最大最小rowkey作为merge后新Region的最大最小rowkey。

    工具修复

    元数据的缺失或者完整性有问题,会影响系统运行,甚至导致集群不可用。最常见的问题如meta表上线失败,Region上线open失败等。这里介绍两个工具:

    工具1:  HBase hbck,在线修复工具,可完整性修复HBase元数据信息

    工具2:OfflineMetaRepair, 可离线重建 hbase:meta元数据表

    在线修复

    前提条件:HDFS fsck 确保HBase根目录下文件没有损坏丢失,如果有,应该先考虑修复/处理corrupt的block。

    步骤1:hbase hbck 检查输出所以ERROR信息,每个ERROR都会说明错误信息。

    步骤2hbase hbck -fixTableOrphones 先修复tableinfo缺失问题,根据内存cache或者hdfs table 目录结构,重新生成tableinfo文件。

    步骤3hbase hbck -fixHdfsOrphones 修复regioninfo缺失问题,根据region目录下的hfile重新生成regioninfo文件。

    步骤4hbase hbck -fixHdfsOverlaps 修复region重叠问题,merge重叠的region为一个region目录,并从新生成一个regioninfo。

    步骤5hbase hbck -fixHdfsHoles 修复region缺失,利用缺失的rowkey范围边界,生成新的region目录以及regioninfo填补这个空洞。

    步骤6:hbase hbck -fixMeta 修复meta表信息,利用regioninfo信息,重新生成对应meta row填写到meta表中,并为其填写默认的分配regionserver。

    步骤7hbase hbck -fixAssignment 把这些offline的region触发上线,当region开始重新open上线的时候,会被重新分配到真实的RegionServer上 , 并更新meta表上对应的行信息。

    离线修复

    前提条件:HDFS fsck确保hbase根目录下文件没有损坏丢失,如果有,应该先考虑修复/处理corrupt的block。

    步骤: 执行如下命令即可:

    hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair -fix

    HBase官网或工具命令提示信息中,都有关于这两个工具的详细使用说明,这里不再展开更多内容。一些题外话,有些开源组件设计的时候,向HBase元数据文件写入一些特有的信息,但是并没有修改到HBase工具的修复工具,或者它自己没有维护修复工具,如果这类文件损坏、丢失了,那么相应的组件就会运行不正常。使用这类组件的用户,应该不仅记录好你的表的基本结构,还要记录表的属性配置等,当发生修复运维行为的时候,需要再次核对确认。

    小结

    本文介绍了运维HBase基础原理中的数据完整性以及逆向元数据修复原理,并介绍了两个逆向修复元数据的工具和实用执行步骤。后续会推出系列文章,介绍更多HBase运维基础、运作原理等,希望能给大家的运维和如何使用HBase方面带来一些帮助。

    推荐阅读:

    Kafka 和 DistributedLog 技术对比

    Hbase优化

    回顾 | HBase架构与应用场景.ppt

    亿级数据从 MySQL 到 Hbase 的三种同步方案与实践

    Uber为什么放弃Postgres选择迁移到MySQL?

    展开全文
  • hbase hbck (1)-fix, 向下兼容用,被-fixAssignments替代 ...(3)-fixMeta, 用于修复meta的问题,前提是HDFS上面的region info信息有并且正确。 (4)-fixHdfsHoles, 修复region holes(空洞,某个区间...

    原文地址:

    https://www.cnblogs.com/xjh713/p/6913042.html?utm_source=itdadao&utm_medium=referral

     

    hbase hbck参数

    -help                                ##查看命令帮助

    -fix                                   ##用于修复region assignments错误;被 -fixAssignments替换
    -fixAssignments     

    -fixMeta                           ##用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。

    -fixHdfsHoles                  ##修复region holes(空洞,某个区间没有region)

    -fixHdfsOrphans             ##修复Orphan region(hdfs上面没有.regioninfo的

    -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     

     

    解决情况


    (1)缺失hbase.version文件     
             加上选项 -fixVersionFile 解决    

    (2)如果一个region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中     
             加上选项 -fixAssignments 解决     

    (3)如果一个region在META表中,并且在regionserver的online region集合中,但是在hdfs上面没有     
             加上选项 -fixAssignments -fixMeta 解决,( -fixAssignments告诉regionserver close region),( -fixMeta删除META表中region的记录)     

    (4)如果一个region在META表中没有记录,没有被regionserver服务,但是在hdfs上面有     
             加上选项 -fixMeta -fixAssignments 解决,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录)     

    (5)如果一个region在META表中没有记录,在hdfs上面有,被regionserver服务了     
            加上选项 -fixMeta 解决,在META表中添加这个region的记录,先undeploy region,后assign     

    (6)如果一个region在META表中有记录,但是在hdfs上面没有,并且没有被regionserver服务     
            加上选项 -fixMeta 解决,删除META表中的记录     

    (7)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region没有被服务     
             加上选项 -fixAssignments 解决,assign这个region     

    (8)如果一个region在META表中有记录,在hdfs上面也有,table是disabled的,但是这个region被某个regionserver服务了     
             加上选项 -fixAssignments 解决,undeploy这个region     

    (9)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region被多个regionserver服务了     
             加上选项 -fixAssignments 解决,通知所有regionserver close region,然后assign region     

    (10)如果一个region在META表中,在hdfs上面也有,也应该被服务,但是META表中记录的regionserver和实际所在的regionserver不相符     
             加上选项 -fixAssignments 解决     

    (11)region holes     
         需要加上 -fixHdfsHoles ,创建一个新的空region,填补空洞,但是不assign 这个 region,也不在META表中添加这个region的相关信息     

    (12)region在hdfs上面没有.regioninfo文件     
         -fixHdfsOrphans 解决     

    (13)region overlaps     
         需要加上 -fixHdfsOverlaps     


    说明:     
    (1)修复region holes时,-fixHdfsHoles 选项只是创建了一个新的空region,填补上了这个区间,还需要加上-fixAssignments -fixMeta 来解决问题,( -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     

      (5)   hbck从  hdfs目录、META、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上
     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • hbase meta表修复

    千次阅读 2015-10-18 21:41:40
    1.重新修复hbase meta(根据hdfs上的regioninfo文件,生成meta) hbase hbck -fixMeta 2.重新将hbase meta分给regionserver(根据meta,将meta上的region分给regionservere) hbase hbck -fixAssignments
  • 一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck ...该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details ...
  • Hbase meta 异常修复

    2019-09-24 20:50:56
    Hbase meta异常修复 标签(空格分隔): Hbase 一,Hbase meta元数据 1.1 背景 线上Hbase 因为在hbase shell中清空 truncate 'table'一张时候发现中途清空错了,嗯下了Ctrl+c,导致某...1.重新修复hbase me...
  • 修复hbase region hole问题流程 1,查询资料用hbase org.jruby.Main check_meta.rb --fix和 hbase hbck -fix会造成数据丢失,考虑其他办法,  首先考虑用major_compact对该进行更新看是否会检测到问题并修复,...
  • HBase meta数据修复

    千次阅读 2015-07-31 08:45:06
    目的为了弄清楚hbase:meta中的数据(每个的region所在的regionserver信息)是否会在集群每次重启后重新生成。过程将hbase:meta中数据全部删除后...这里又牵扯到另一个问题,如何修复hbase:meta中的数据,用户
  • 在最新发布的Hortonworks HDP Sandbox 2.2版本上,HBase启动时会报错,原因是新版本的HBase的存放路径与过去有所不同,而启动脚本依然沿用了旧有的命令行启动...下面来说一下如何修复这个问题:最负责启动HBase的命令
  • HBase表跨集群迁移

    千次阅读 2017-10-11 16:05:07
    需求:存在两个集群集群1、集群2,将集群1中Hbase数据表复制到集群2中,此时两个集群HBase版本...hbase表数据存储路径在hbase-site.xml文件中指定,该xml文件通常在hbase安装目录下./conf/hbase-site.xml。 命令行
  • Hbase表跨集群迁移手册 将旧集群的namespaceA下的表移到新集群的namespaceB下面 1、检查新、旧集群的hdfs、hbase是否正常 (1)使用命令:hbase hbck #查看hbasemeta表情况,确认0个,说明hdfs中的数据和hbase...
  • 修复hbase region hole问题流程 1,查询资料用hbase org.jruby.Main check_meta.rb --fix和 hbase hbck -fix会造成数据丢失,考虑其他办法,  首先考虑用major_compact对该进行更新看是否会检测到问题并修复,...
  • hive-hbase表的建立

    2017-01-17 11:10:00
    HIVE-HBASE表CDH4的时候不成熟select*的时候会查询不出(必须通过字段名称),CDH5已经修复这点需要注意 接口表hive部分一般不做join select会占性能,因为hbase接口必须走rowkey才走索引。所以一般hive-hbase表只...
  • 五:hbase 修复 一:hbase 的设计管理 1.1 hbase 的shell 命令 1.1.1 创建一个命名空间 在新版本的hbase是存储在命名空间当中,默认的命名空间是default 创建一个命名空间: create_namesp...
  • 在源集群上将hbase表整个目录get到本地磁盘 hdfs dfs -get /apps/hbase/data/data/namespace/tablename 或者hadoop fs -copyToLocal /apps/hbase/data/data/namespace/tablename 将本地磁盘当前目录下的数据put...
  • 应该是持续插入造成在通过hbase 60010端口查看内容的时候,发现Table Regions显示的内容下面有一行数据的End Key为空。这个下大概有10W条,但是通过hbase count命令统计数据总数的时候却只能检索出来14000条左右...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,244
精华内容 3,697
关键字:

修复hbase表