HBase区域无法分割

问题描述

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

错误:org.apache.hadoop.hbase.client.DoNotRetryRegionException: ecd6ce2a88f5dab5856d67640fc1cxxx未打开; regionState = {ecd6ce2a88f5dab5856d67640fc1cxxx state =正在分裂, ts = 1597668752713,server = xxx.cern.ch,16020,1597668462556}在 org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure.checkOnline(AbstractStateMachineTableProcedure.java:194) 在 org.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.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:814) 在 org.apache.hadoop.hbase.shaded.protobuf.generation.MasterProtos $ MasterService $ 2.callBlockingMethod(MasterProtos.java) 在org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:413)处 org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130)在 org.apache.hadoop.hbase.ipc.RpcExecutor $ Handler.run(RpcExecutor.java:324) 在 org.apache.hadoop.hbase.ipc.RpcExecutor $ Handler.run(RpcExecutor.java:304)

在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.>

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

在一些不同的表上会发生这种情况。 HFile似乎根本没有损坏。

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

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

解决方案:

我们设法通过以下命令禁用全局拆分来克服这种不一致的状态:splitormerge_switch 'SPLIT',false,重新启动活动的HBase主服务器,重新启用splitormerge_switch 'SPLIT',true进行拆分以及使用{{1}拆分手动受影响的区域}。我们遵循此过程,因为我们注意到,当拆分由HBase Master(不是手动)触发时,由于HBase主内存中的状态与HBase元数据中的状态不同,因此以NullPointerException结尾。在hbase:Meta中,它在内存分割中是OPEN。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)