在hbase 2.1.3中,我一直在分割一些区域。尝试使用split命令手动拆分时,我看到以下消息:
错误:org.apache.hadoop.hbase.client.donotretryregionexception:ecd6ce2a88f5dab5856d67640fc1c未打开;regionstate={ecd6ce2a88f5dab5856d67640fc1c state=spliting,ts=1597668752713,server=.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.generated.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.>
只有当我禁用相应的表时错误才会消失,但这不是我的解决方案。到目前为止,我没有发现任何类似的问题。
这种情况发生在一些不同的表中。文件似乎一点也没有损坏。
此外,我在日志中看到这样一个可能与此问题无关的警告:
<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 master内存中的状态与hbase meta内存中的状态不同。在hbase:meta,它是开放的,在内存分裂。
我们不知道我们是如何得到这种状态的,也许这是2.1.3版本中的一个bug,因为我们在hbase 2.2.x中已经没有观察到它了。
暂无答案!
目前还没有任何答案,快来回答吧!