首页 > 解决方案 > HBase 区域无法拆分

问题描述

我坚持在 HBase 2.1.3 中拆分一些区域。尝试使用 split 命令手动拆分时,我看到以下消息:

错误:org.apache.hadoop.hbase.client.DoNotRetryRegionException:ecd6ce2a88f5dab5856d67640fc1cxxx 未打开;regionState={ecd6ce2a88f5dab5856d67640fc1cxxx state=SPLITTING, ts=1597668752713, server=xxx.cern.ch,16020,1597668462556} at org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure.checkureOnline(AbstractStateMachineTableProcedure.checkureOnline(AbstractStateMachineTableProcedure.checkureOnline(AbstractStateMachineTableProcedure.checkureOnline) at: apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:117) 在 org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:747) 在 org.apache.hadoop.hbase .master.HMaster$3.run(HMaster.java:1864) 在 org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) 在 org.apache.hadoop.hbase.master.HMaster。 splitRegion(HMaster.java:1856) 在 org.apache。

在 Regionserver 日志中,我看到以下内容:

<regionserver.HRegionServer>: <TRANSITION FAILED server {   host_name: "xxx.cern.ch"   port: 16020   start_code: 1597315203667 } transition {   transition_code: READY_TO_SPLIT   region_info {
    region_id: 1593698155128
    table_name {
      namespace: "test"
      qualifier: "2__20754__186111"
    }
    start_key: ""
    end_key: ""
    offline: false
    split: false
    replica_id: 0   }   region_info {
    region_id: 1597615214267
    table_name {
      namespace: "test"
      qualifier: "2__20754__186111"
    }
    start_key: ""
    end_key: "1923058__7625979394016775807__0"
    offline: false
    split: false
    replica_id: 0   }   region_info {
    region_id: 1597615214267
    table_name {
      namespace: "test"
      qualifier: "2__20754__186111"
    }
    start_key: "1923058__7625979394016775807__0"
    end_key: ""
    offline: false
    split: false
    replica_id: 0   } } : Failed transition ecd6ce2a88f5dab5856d67640fc1cxxx is not OPEN; regionState={ecd6ce2a88f5dab5856d67640fc1cxxx state=SPLITTING, ts=1597316103168, server=xxx.cern.ch,16020,1597315203667}> <ERROR> <regionserver.SplitRequest>: <Unable to ask master to split test:2__20754__186xxx,,1593698155128.ecd6ce2a88f5dab5856d67640fc1cxxx.>

只有当我禁用相应的表时错误才会消失,但这对我来说不是解决方案。到目前为止,我在任何地方都没有发现任何类似的问题。

这发生在几个不同的表上。HFiles 似乎根本没有损坏。

此外,我在日志中看到可能与此问题无关的警告:

<WARN> <compactions.CompactionProgress>: <totalCompactingKVs=102710224 less than currentCompactedKVs=588714221>

解决方案:

我们设法通过使用以下命令禁用全局拆分来克服这种不一致的状态:splitormerge_switch 'SPLIT', false重新启动活动 HBase 主服务器,重新启用拆分splitormerge_switch 'SPLIT', true并手动拆分受影响的区域split '<region hash>'。我们遵循了这个过程,因为我们注意到当 HBase Master(不是手动)触发拆分时,它会以 NullPointerException 结束,因为 HBase 主内存中的状态与 HBase 元中的状态不同。在 hbase:meta 中,它是 OPEN 的,在内存 SPLITTING 中。

我们不知道我们是如何结束这种状态的,也许这是 2.1.3 版本中的一个错误,因为我们在 HBase 2.2.x 中再也没有观察到它。

标签: hbase

解决方案


推荐阅读