精华内容
下载资源
问答
  • HBase 修复region

    2012-10-15 17:58:52
    定位线上问题发现HBase 60020端口响应总是超时。但线上服务器发现该region-server均正常。...在修复region后先关的聚类运算和关联的数据接入等任务都进行了重启和确认。 最终建模结果正常。     ...

    定位线上问题发现HBase 60020端口响应总是超时。但线上服务器发现该region-server均正常。

     

    通过 hbase hbck  发现该表虽然region 都在线,但是有几个region 有 hole。通过bin/hbase hbck -fix 定位修复。

     

     

    在修复region后先关的聚类运算和关联的数据接入等任务都进行了重启和确认。 最终建模结果正常。

     

     

    其他命令可以参见:http://my.oschina.net/beiyou/blog/76456

    展开全文
  • HBaseRegion切分原理

    2019-10-30 15:19:04
    HBaseRegion切分原理 Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,也必然是所有分布式系统追求无限扩展性的一副良药。HBase系统中Region自动切分是如何实现的?这里面涉及很多知识点,比如...

    HBase之Region切分原理

     

          Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,也必然是所有分布式系统追求无限扩展性的一副良药。HBase系统中Region自动切分是如何实现的?这里面涉及很多知识点,比如Region切分的触发条件是什么?Region切分的切分点在哪里?如何切分才能最大的保证Region的可用性?如何做好切分过程中的异常处理?切分过程中要不要将数据移动?等等,这篇文章将会对这些细节进行基本的说明,一方面可以让大家对HBase中Region自动切分有更加深入的理解,另一方面如果想实现类似的功能也可以参考HBase的实现方案。

    1、Region切分触发策略

          在最新稳定版(1.2.6)中,HBase已经有多达6种切分触发策略。当然,每种触发策略都有各自的适用场景,用户可以根据业务在表级别选择不同的切分触发策略。常见的切分策略如下图:

     

         另外,还有一些其他分裂策略,比如使用DisableSplitPolicy:可以禁止region发生分裂;而KeyPrefixRegionSplitPolicy,DelimitedKeyPrefixRegionSplitPolicy对于切分策略依然依据默认切分策略,但对于切分点有自己的看法,比如KeyPrefixRegionSplitPolicy要求必须让相同的PrefixKey待在一个region中。在用法上,一般情况下使用默认切分策略即可,也可以在cf级别设置region切分策略,命令为:

     

    [Shell] 纯文本查看 复制代码

    ?

    1

    create ’table’, {NAME => ‘cf’, SPLIT_POLICY => ‘org.apache.hadoop.hbase.regionserver. ConstantSizeRegionSplitPolicy'}

    2、Region切分准备工作-寻找SplitPoint

          region切分策略会触发region切分,切分开始之后的第一件事是寻找切分点-splitpoint。所有默认切分策略,无论是ConstantSizeRegionSplitPolicy、IncreasingToUpperBoundRegionSplitPolicy抑或是SteppingSplitPolicy,对于切分点的定义都是一致的。当然,用户手动执行切分时是可以指定切分点进行切分的,这里并不讨论这种情况。那切分点是如何定位的呢?整个region中最大store中的最大文件中最中心的一个block的首个rowkey。这是一句比较消耗脑力的语句,需要细细品味。另外,HBase还规定,如果定位到的rowkey是整个文件的首个rowkey或者最后一个rowkey的话,就认为没有切分点。

          什么情况下会出现没有切分点的场景呢?最常见的就是一个文件只有一个block,执行split的时候就会发现无法切分。很多新同学在测试split的时候往往都是新建一张新表,然后往新表中插入几条数据并执行一下flush,再执行split,奇迹般地发现数据表并没有真正执行切分。原因就在这里,这个时候仔细的话你翻看debug日志是可以看到这样的日志滴:

    3、Region核心切分流程

          HBase将整个切分过程包装成了一个事务,意图能够保证切分事务的原子性。整个分裂事务过程分为三个阶段:prepare – execute – (rollback) ,操作模版如下:

    • prepare阶段:在内存中初始化两个子region,具体是生成两个HRegionInfo对象,包含tableName、regionName、startkey、endkey等。同时会生成一个transaction journal,这个对象用来记录切分的进展,具体见rollback阶段。

    • execute阶段:切分的核心操作。见下图(来自Hortonworks):



     

          1. regionserver 更改ZK节点 /region-in-transition 中该region的状态为SPLITING。

          2. master通过watch节点/region-in-transition检测到region状态改变,并修改内存中region的状态,在master页面RIT模块就可以看到region执行split的状态信息。

          3. 在父存储目录下新建临时文件夹.split保存split后的daughter region信息。

          4. 关闭parent region:parent region关闭数据写入并触发flush操作,将写入region的数据全部持久化到磁盘。此后短时间内客户端落在父region上的请求都会抛出异常NotServingRegionException。

          5. 核心分裂步骤:在.split文件夹下新建两个子文件夹,称之为daughter A、daughter B,并在文件夹中生成reference文件,分别指向父region中对应文件。这个步骤是所有步骤中最核心的一个环节,生成reference文件日志如下所示:

          

    [Shell] 纯文本查看 复制代码

    ?

    1

    2017-08-12 11:53:38,158 DEBUG [StoreOpener-0155388346c3c919d3f05d7188e885e0-1] regionserver.StoreFileInfo: reference 'hdfs://hdfscluster/hbase-rsgroup/data/default/music/0155388346c3c919d3f05d7188e885e0/cf/d24415c4fb44427b8f698143e5c4d9dc.00bb6239169411e4d0ecb6ddfdbacf66' to region=00bb6239169411e4d0ecb6ddfdbacf66 hfile=d24415c4fb44427b8f698143e5c4d9dc。

          其中reference文件名为d24415c4fb44427b8f698143e5c4d9dc.00bb6239169411e4d0ecb6ddfdbacf66,格式看起来比较特殊,那这种文件名具体什么含义呢?那来看看该reference文件指向的父region文件,根据日志可以看到,切分的父region是00bb6239169411e4d0ecb6ddfdbacf66,对应的切分文件是d24415c4fb44427b8f698143e5c4d9dc,可见reference文件名是个信息量很大的命名方式,如下所示:

          除此之外,还需要关注reference文件的文件内容,reference文件是一个引用文件(并非linux链接文件),文件内容很显然不是用户数据。文件内容其实非常简单,主要有两部分构成:其一是切分点splitkey,其二是一个boolean类型的变量(true或者false),true表示该reference文件引用的是父文件的上半部分(top),而false表示引用的是下半部分 (bottom)。为什么存储的是这两部分内容?且听下文分解。看官可以使用hadoop命令亲自来查看reference文件的具体内容:

    [Shell] 纯文本查看 复制代码

    ?

    1

    hadoop dfs -cat /hbase-rsgroup/data/default/music/0155388346c3c919d3f05d7188e885e0/cf/d24415c4fb44427b8f698143e5c4d9dc.00bb6239169411e4d0ecb6ddfdbacf66

        6. 父region分裂为两个子region后,将daughter A、daughter B拷贝到HBase根目录下,形成两个新的region。

        7. parent region通知修改 hbase.meta 表后下线,不再提供服务。下线后parent region在meta表中的信息并不会马上删除,而是标注split列、offline列为true,并记录两个子region。为什么不立马删除?且听下文分解。

        8. 开启daughter A、daughter B两个子region。通知修改 hbase.meta 表,正式对外提供服务。

       9.rollback阶段:如果execute阶段出现异常,则执行rollback操作。为了实现回滚,整个切分过程被分为很多子阶段,回滚程序会根据当前进展到哪个子阶段清理对应的垃圾数据。代码中使用 JournalEntryType 来表征各个子阶段,具体见下图:

    4、Region切分事务性保证

          整个region切分是一个比较复杂的过程,涉及到父region中HFile文件的切分、两个子region的生成、系统meta元数据的更改等很多子步骤,因此必须保证整个切分过程的事务性,即要么切分完全成功,要么切分完全未开始,在任何情况下也不能出现切分只完成一半的情况。

          为了实现事务性,hbase设计了使用状态机(见SplitTransaction类)的方式保存切分过程中的每个子步骤状态,这样一旦出现异常,系统可以根据当前所处的状态决定是否回滚,以及如何回滚。遗憾的是,目前实现中这些中间状态都只存储在内存中,因此一旦在切分过程中出现regionserver宕机的情况,有可能会出现切分处于中间状态的情况,也就是RIT状态。这种情况下需要使用hbck工具进行具体查看并分析解决方案。在2.0版本之后,HBase实现了新的分布式事务框架Procedure V2(HBASE-12439),新框架将会使用HLog存储这种单机事务(DDL操作、Split操作、Move操作等)的中间状态,因此可以保证即使在事务执行过程中参与者发生了宕机,依然可以使用HLog作为协调者对事务进行回滚操作或者重试提交,大大减少甚至杜绝RIT现象。这也是是2.0在可用性方面最值得期待的一个亮点!!!

    5、Region切分对其他模块的影响

          通过region切分流程的了解,我们知道整个region切分过程并没有涉及数据的移动,所以切分成本本身并不是很高,可以很快完成。切分后子region的文件实际没有任何用户数据,文件中存储的仅是一些元数据信息-切分点rowkey等,那通过引用文件如何查找数据呢?子region的数据实际在什么时候完成真正迁移?数据迁移完成之后父region什么时候会被删掉?

          1. 通过reference文件如何查找数据?

    这里就会看到reference文件名、文件内容的实际意义啦。整个流程如下图所示:

     

     

         (1)根据reference文件名(region名+真实文件名)定位到真实数据所在文件路径

         (2)定位到真实数据文件就可以在整个文件中扫描待查KV了么?非也。因为reference文件通常都只引用了数据文件的一半数据,以切分点为界,要么上半部分文件数据,要么下半部分数据。那到底哪部分数据?切分点又是哪个点?还记得上文又提到reference文件的文件内容吧,没错,就记录在文件中。

          2. 父region的数据什么时候会迁移到子region目录?

          答案是子region发生major_compaction时。我们知道compaction的执行实际上是将store中所有小文件一个KV一个KV从小到大读出来之后再顺序写入一个大文件,完成之后再将小文件删掉,因此compaction本身就需要读取并写入大量数据。子region执行major_compaction后会将父目录中属于该子region的所有数据读出来并写入子region目录数据文件中。可见将数据迁移放到compaction这个阶段来做,是一件顺便的事。

          3. 父region什么时候会被删除?

          实际上HMaster会启动一个线程定期遍历检查所有处于splitting状态的父region,确定检查父region是否可以被清理。检测线程首先会在meta表中揪出所有split列为true的region,并加载出其分裂后生成的两个子region(meta表中splitA列和splitB列),只需要检查此两个子region是否还存在引用文件,如果都不存在引用文件就可以认为该父region对应的文件可以被删除。

          4. split模块在生产线的一些坑?

          有些时候会有同学反馈说集群中部分region处于长时间RIT,region状态为spliting。通常情况下都会建议使用hbck看下什么报错,然后再根据hbck提供的一些工具进行修复,hbck提供了部分命令对处于split状态的rit region进行修复,主要的命令如下:

    [Shell] 纯文本查看 复制代码

    ?

    1

    2

    3

    -fixSplitParents  Try to force offline split parents to be online.

     -removeParents    Try to offline and sideline lingering parents and keep daughter regions.

     -fixReferenceFiles  Try to offline lingering reference store files

           其中最常见的问题是 :

    [Shell] 纯文本查看 复制代码

    ?

    1

    ERROR: Found lingering reference file hdfs://mycluster/hbase/news_user_actions/3b3ae24c65fc5094bc2acfebaa7a56de/meta/0f47cda55fa44cf9aa2599079894aed6.b7b3faab86527b88a92f2a248a54d3dc”

          简单解释一下,这个错误是说reference文件所引用的父region文件不存在了,如果查看日志的话有可能看到如下异常:

    [Shell] 纯文本查看 复制代码

    ?

    1

    java.io.IOException: java.io.IOException: java.io.FileNotFoundException: File does not exist:/hbase/news_user_actions/b7b3faab86527b88a92f2a248a54d3dc/meta/0f47cda55fa44cf9aa2599079894aed

          父region文件为什么会莫名其妙不存在?经过和朋友的讨论,确认有可能是因为官方bug导致,详见HBASE-13331。这个jira是说HMaster在确认父目录是否可以被删除时,如果检查引用文件(检查是否存在、检查是否可以正常打开)抛出IOException异常,函数就会返回没有引用文件,导致父region被删掉。正常情况下应该保险起见返回存在引用文件,保留父region,并打印日志手工介入查看。如果大家也遇到类似的问题,可以看看这个问题,也可以将修复patch打到线上版本或者升级版本。

    展开全文
  • [hbase版本1.1.2] [hbase@kmr-5b9c18fc-gn-7198aa8e-client-1-001 ~]$ ll -t total 788 -rw-r--r--. 1 hbase hadoop 60614 Dec 27 18:22 20171227_8th_After_fixAssgnmentOf_should_end_with_an_empty_key_FORte
    [hbase版本1.1.2]

    【第一次检查】
    # 执行命令: hbase hbck -details "default:test_tony" > 20171227_hbck_test_tony 2>&1 &
    # 查看执行日志 20171227_hbck_test_tony 发现3种错误:[1] First region should start with an empty key、[2] Region not deployed on any region server、[3] a hole in the region chain
    日志摘要如下
    [hbase@kmr-core1-001 ~]$ less 20171227_hbck_test_tony
    ... ...
    ERROR: (region test_tony,P_4013488,1512319359517.c6892d77b1ea148f3e0642d9fdce68af.) First region should start with an empty key.  You need to  create a new region and regioninfo in HDFS to plug the hole.
    'ksai:export_import_table_test': There is a hole in the region chain between P_802083 and P_901927D.  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 P_A011FE2 and P_B00FAE.  You need to create a new .regioninfo and region dir in hdfs to plug the hole.
    ---- Table 'test_tony': overlap groups
    There are 0 overlap groups with 0 overlapping regions
    ERROR: Found inconsistency in table test_tony
    2017-12-27 16:27:47,925 INFO  [main] util.HBaseFsck: Computing mapping of all store files
    ... ...
    ERROR: Region { meta => test_tony,P_2009AE6,1511517508282.1dc960c2cb30a897ec50bbb656e9faa9., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/1dc960c2cb30a897ec50bbb656e9faa9, deployed => , replicaId => 0 } not deployed on any region server.
    ERROR: Region { meta => test_tony,P_F007E:,1511757663778.5534b6665b97db8d8a7851955ccd8dc5., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/5534b6665b97db8d8a7851955ccd8dc5, deployed => , replicaId => 0 } not deployed on any region server.
    ERROR: Region { meta => test_tony,P_802083,1513409109894.57ff7ad1a791fb0f8c70f751108d55dd., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/57ff7ad1a791fb0f8c70f751108d55dd, deployed => , replicaId => 0 } not deployed on any region server.
    ERROR: Region { meta => test_tony,,1511517508282.d0a9bbf43b36b122b7c7f4256f9cdba4., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/d0a9bbf43b36b122b7c7f4256f9cdba4, deployed => , replicaId => 0 } not deployed on any region server.
    ERROR: Region { meta => test_tony,P_A011FE2,1511537471096.f5777d857532db7ac592e3b621c0372e., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/f5777d857532db7ac592e3b621c0372e, deployed => , replicaId => 0 } not deployed on any region server.
    ... ...
    2017-12-27 16:27:49,637 INFO  [main] util.HBaseFsck: Finishing hbck
    Summary:
    Table hbase:meta is okay.
        Number of regions: 1
        Deployed on:  kmr-5b9c18fc-gn-7b3518df-core-1-005.ksc.com,16020,1514187996430
    Table test_tony is inconsistent.
        Number of regions: 8
        Deployed on:  kmr-5b9c18fc-gn-7b3518df-core-1-001.ksc.com,16020,1514188220947 kmr-5b9c18fc-gn-7b3518df-core-1-003.ksc.com,16020,1514187978942 kmr-5b9c18fc-gn-7b3518df-core-1-004.ksc.com,16020,1514187984473 kmr-5b9c18fc-gn-7b3518df-core-1-005.ksc.com,16020,1514187996430 kmr-5b9c18fc-gn-7b3518df-core-1-006.ksc.com,16020,1514188010078 kmr-5b9c18fc-gn-7b3518df-core-1-008.ksc.com,16020,1514188032392
    9 inconsistencies detected.
    Status: INCONSISTENT
    # 阻塞在了转移一个region到其他region server的过程中,可能的原因是源region未分配给其他region server,可能的解决办法是:在保证这个hfile存在的前提下,手动强制assign该region



    【第一次修复】

    # 注意:修复此表之前先停掉它
    hbase(main):022:0> disable 'default:test_tony'
    0 row(s) in 4.9250 seconds

    # 再执行命令: hbase hbck -repair "default:test_tony" > 20171227_tried_repaired_test_tony 2>&1 &

    # 查看执行日志 20171227_tried_repaired_test_tony 发现上述的三种错误中的两种已修复,但是 Region not deployed on any region server错误还没能修复
    日志摘要如下
    ERROR: Region { meta => test_tony,P_2009AE6,1511517508282.1dc960c2cb30a897ec50bbb656e9faa9., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/1dc960c2cb30a897ec50bbb656e9faa9, deployed => , replicaId => 0 } not deployed on any region server.
    ERROR: Region { meta => test_tony,P_F007E:,1511757663778.5534b6665b97db8d8a7851955ccd8dc5., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/5534b6665b97db8d8a7851955ccd8dc5, deployed => , replicaId => 0 } not deployed on any region server.
    Trying to fix unassigned region...
    Trying to fix unassigned region...
    ERROR: Region { meta => test_tony,,1511517508282.d0a9bbf43b36b122b7c7f4256f9cdba4., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/d0a9bbf43b36b122b7c7f4256f9cdba4, deployed => , replicaId => 0 } not deployed on any region server.
    Trying to fix unassigned region...
    ERROR: Region { meta => test_tony,P_802083,1513409109894.57ff7ad1a791fb0f8c70f751108d55dd., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/57ff7ad1a791fb0f8c70f751108d55dd, deployed => , replicaId => 0 } not deployed on any region server.
    Trying to fix unassigned region...
    ERROR: Region { meta => test_tony,P_A011FE2,1511537471096.f5777d857532db7ac592e3b621c0372e., hdfs => hdfs://hdfs-ha/apps/hbase/data/data/default/test_tony/f5777d857532db7ac592e3b621c0372e, deployed => , replicaId => 0 } not deployed on any region server.
    Trying to fix unassigned region...



    【第二次修复】
    # 执行命令: hbase hbck -fixMeta -fixAssignments "default:test_tony" > 20171227_2nd_tried_repaired_test_tony 2>&1 &
    # 查看执行日志 20171227_2nd_tried_repaired_test_tony 发现上面的三种错误中[1]和[3]修好了,但是[2]还没修复,而且新发现了错误 [4] Region failed to move out of transition within timeout XXXXXXms
    日志摘要如下
    2017-12-27 17:07:19,032 WARN  [hbasefsck-pool1-t42] util.HBaseFsck: Unable to complete check or repair the region 'test_tony,P_802083,1513409109894.57ff7ad1a791fb0f8c70f751108d55dd.'.
    java.io.IOException: Region {ENCODED => 57ff7ad1a791fb0f8c70f751108d55dd, NAME => 'test_tony,P_802083,1513409109894.57ff7ad1a791fb0f8c70f751108d55dd.', STARTKEY => 'P_802083', ENDKEY => 'P_901927D'} failed to move out of transition within timeout 120000ms
            at org.apache.hadoop.hbase.util.HBaseFsckRepair.waitUntilAssigned(HBaseFsckRepair.java:149)
            at org.apache.hadoop.hbase.util.HBaseFsck.tryAssignmentRepair(HBaseFsck.java:2114)
            at org.apache.hadoop.hbase.util.HBaseFsck.checkRegionConsistency(HBaseFsck.java:2315)
            at org.apache.hadoop.hbase.util.HBaseFsck.access$1100(HBaseFsck.java:197)
            at org.apache.hadoop.hbase.util.HBaseFsck$CheckRegionConsistencyWorkItem.call(HBaseFsck.java:1887)
            at org.apache.hadoop.hbase.util.HBaseFsck$CheckRegionConsistencyWorkItem.call(HBaseFsck.java:1875)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
            at java.lang.Thread.run(Thread.java:745)
    2017-12-27 17:05:21,028 INFO  [hbasefsck-pool1-t28] util.HBaseFsckRepair: Region still in transition, waiting for it to become assigned: {ENCODED => f5777d857532db7ac592e3b621c0372e, NAME => 'test_tony,P_A011FE2,1511537471096.f5777d857532db7ac592e3b621c0372e.', STARTKEY => 'P_A011FE2', ENDKEY => 'P_B00FAE'}
    2017-12-27 17:05:22,028 INFO  [hbasefsck-pool1-t26] util.HBaseFsckRepair: Region still in transition, waiting for it to become assigned: {ENCODED => d0a9bbf43b36b122b7c7f4256f9cdba4, NAME => 'test_tony,,1511517508282.d0a9bbf43b36b122b7c7f4256f9cdba4.', STARTKEY => '', ENDKEY => 'P_2009AE6'}
    # 出现错误[4]以及Region still in transition(RIT)的原因是,该region被原来的Region Server unassigned了,但是还没有被assigned到一个新的RS上,处于无主状态。


    【第三次修复】
    # 在linux命令行执行 hbase hbck -fixAssignments 'default:test_tony' > 20171227_toFix-_an_empty_key 2>&1 &
    # 查看执行日志 20171227_toFix-_an_empty_key ,成功修复! 
    Summary:
    Table hbase:meta is okay.
        Number of regions: 1
        Deployed on:  kmr-5b9c18fc-gn-7b3518df-core-1-005.ksc.com,16020,1514187996430
    Table test_tony is okay.
        Number of regions: 0
        Deployed on: 
    0 inconsistencies detected.
    Status: OK

    # 再校验一下数据是不是好了
    hbase hbck -fixAssignments 'default:test_tony' > 20171227_After_fixAssgnmentOf_should_end_with_an_empty_key_FORtest_tony 2>&1 &
    # 查看执行日志 20171227_After_fixAssgnmentOf_should_end_with_an_empty_key_FORtest_tony 发现Status: OK

    # 成功修复以后,再重新启用表
    hbase(main):028:0> enable 'default:test_tony'
    0 row(s) in 2.3100 seconds

    至此,修复完成。
    展开全文
  • hbase 修复 hbase hbck

    万次阅读 2016-12-14 14:40:18
    hbase hbck 新版本的 hbck 可以修复各种错误...(2)-fixAssignments,用于修复region assignments错误 (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 修复 hbck

    2017-05-27 15:23:00
    hbase 修复使用hbck 新版本的 hbck 可以修复各种错误,修复选项是:...(2)-fixAssignments,用于修复region assignments错误 (3)-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且...
  • HBase修复命令

    2021-01-28 09:03:22
    (2)-fixAssignments,用于修复region assignments错误 (3)-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。 (4)-fixHdfsHoles,修复region holes(空洞,某个区间没有region)...
  • 修复hbase region hole问题流程 1,查询资料用hbase org.jruby.Main check_meta.rb --fix和 hbase hbck -fix会造成数据丢失,考虑其他办法,  首先考虑用major_compact对该表进行更新看是否会检测到问题并修复,...
  • 修复hbase region hole问题流程 1,查询资料用hbase org.jruby.Main check_meta.rb --fix和 hbase hbck -fix会造成数据丢失,考虑其他办法,  首先考虑用major_compact对该表进行更新看是否会...
  • 有时候需要从装hbase表,忘记删除表中数据,导致新建的表无法和前面的表同名,报表已经存在,这只是一个小问题,但是有时候没有报表不... Region FPL,,1466475487627.98263b44ca5774cd901dedd4637d17ba. is not onl
  • Hbase Region下线故障修复

    千次阅读 2019-08-16 12:36:56
    当发现HBASE的某张表无法正常访问,或scan时: 发现故障后,检查hbase(以student表为例): [hadoop@hadoop112 ~]$ hbase hbck -details student 结果重要部分如下: Summary: Table student is okay. ...
  • Hbase region空洞修复工具

    千次阅读 2011-10-12 16:55:36
    众所周知,Hbase 中随着某个table 数量的增多必然会分裂成多个region,这些region 中的start-key 和 end-key 首位相连组成一个闭环.如下图所示 在表健康的时候可以用hbck工具来扫描整个表.结果当然是健康的状态 ...
  • Hbase Region still in transition修复

    千次阅读 2016-02-19 15:33:04
    hbase内出现部分region挂空的现象。在界面上发现某个表的regionserver无法点击进入 鼠标移至该rs上的链接本应端口号为60030,但却指向为60010。 此时所有对该region的访问都将失败。 原因分析 该情况意味着该...
  • 环境描述:ambari集群+hdfs+zookeeper+hbase 错误描述:hdfs 存在部分 corrupt replica blocks/missing blocks/under replicated blockes Block Errors 31 corrupt replica / 30 missing / 31 under ...
  • 故障描述最近我们的测试HBase集群经常因为机房网络维护而奔溃掉,在集群奔溃以后重启HBase集群发现有大部分region没有online的情况,导致查询表数据的时候会出现如下异常:org.apache.hadoop.hbase....
  • hbase修复元数据

    千次阅读 2019-04-11 18:23:10
    (2)-fixAssignments,用于修复region assignments错误 (3)-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。 (4)-fixHdfsHoles,修复region holes(空洞,某个区...
  • hbase region下线故障修复

    千次阅读 2018-11-26 14:51:48
    故障: 1.8.7-p357 :023 > get 'GPSDATA','42dc_1698207629_8482964999' ...2.使用hbase修复命令 $ hbase hbck -fixMeta 3.启用表 $ hbase shell 1.8.7-p357 :023 > disable 'GPSDATA' 成功修复!
  • 查询Namespace 为AMRCLOUD 中名为powerdata ...-fixHdfsHoles,修复region holes(空洞,某个区间没有region)问题  -repair,以上2个命令没有解决时尝试该命令,该命令包含多个修复  
  • 在压测Phoenix二级索引功能时,出现HBase Master异常,通过RegionServer日志看到,报了`org.apache.hadoop.hbase.exceptions.RegionOpeningException`异常,提示Region已经打开。具体日志细节如下:
  • 在合并Region的过程中出现永久RIT怎么办?笔者在生产环境中就遇到过这种情况,在批量合并Region的过程中,出现了永久MERGING_NEW的情况,...因为在RIT状态时,HBase是不会执行Region负载均衡的,即使手动执行balance...
  • HBase原理之HBase Region合并解析

    千次阅读 2018-09-24 23:54:26
    HBase表的基本单位是Region,日常调用HBase API操作一个表时,交互的数据也会以Region的形式进行呈现。前面介绍过HBase Region切分策略原理,一个表可以有若干个Region,本文主要介绍Region合并的一些问题和解决方法...
  • HBase region is not online 问题修复

    千次阅读 2018-10-10 15:04:35
    注: 转自 HBase region is not online 问题修复 一年多没有搞HBase了,回想前年和营神一起战斗的日子,~~~。今天线上遇到下面一个问题: hbase(main):002:0&gt; get 'mynamespace:user_basic_info','BAC...
  • https://github.com/apache/hbase-operator-tools.git https://yq.aliyun.com/articles/686248 https://yq.aliyun.com/articles/586755?utm_content=m_48695 http://hbase.apache.org/book.html#arch.bulk.lo...
  • 最近某应用反馈HBase数据插入数据后、查询出现错误数据现象如下:有一行数据:前面时间T1:插入3列后面时间T2:插入1列(通过put新值来更新某列数据)scan操作只能看到 时间点T1的3列数据,get操作只能看到时间点T2的1...
  • hbase region in transition

    2020-06-03 18:36:37
    HBase有哪些操作会触发Region状态变迁?一次正常操作过程中Region状态变迁的完整流程是怎么样的?如果Region状态在变迁的过程中出现异常又会怎么样? Region存在多少种状态?有哪些操作会触发状态变迁? HBase在...
  • 因为前面Hbase2集群出现过一次故障,当时花了一个周末才修好,就去了解整理了一些hbase故障的,事故现场可以看前面写的一篇:Hbase集群挂掉的一次惊险经历一. HBCK一致性一致性是...
  • HBase Region拆分逻辑

    2016-05-08 11:13:29
    Region拆分 Region的拆分逻辑是通过CompactSplitThread线程的requestSplit方法来触发的,每当执行MemstoreFlush操作时都会调用该方法进行判断,看是否有必要...目标RegionServer的线上Region数没有达到hbase.r...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,862
精华内容 744
关键字:

hbase修复region