2018-05-17 13:11:12,695 ERROR [B.defaultRpcServer.handler=99,queue=9,port=26020] regionserver.RSRpcServices: Failed warming up region tsdb,\x00\x12\x19Z\xD2P,1525840795373.c3ebb018b9c3fc101a7b9def9100fb5f.
java.io.IOException: java.io.IOException: java.io.FileNotFoundException: File does not exist: /hbase-holmes/data/default/tsdb/32ef153360b7a9499e555a7937418ee7/t/a6cdb25689234e539ed82230ed7b790f
at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:71)
at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:61)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:1828)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1799)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1712)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:588)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:365)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)
at org.apache.hadoop.hbase.regionserver.HRegion.initializeStores(HRegion.java:943)
at org.apache.hadoop.hbase.regionserver.HRegion.initializeWarmup(HRegion.java:967)
at org.apache.hadoop.hbase.regionserver.HRegion.warmupHRegion(HRegion.java:6554)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.warmupRegion(RSRpcServices.java:1709)
at org.apache.hadoop.hbase.protobuf.generated.AdminProtos$AdminService$2.callBlockingMethod(AdminProtos.java:22241)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2188)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:112)
at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:133)
at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:108)
at java.lang.Thread.run(Thread.java:745)
...
2条答案
按热度按时间6pp0gazn1#
我已经找到了造成这种现象的原因,一些区域在分裂过程中出现了一些问题,这些区域总是处于过渡阶段,没有完成分裂过程,这就导致了平衡器不能正常运行。
请看位于hmster.java的平衡器代码snippy:
“if”语句始终为true,因此此方法始终返回false,并且不会运行实际平衡区域服务器集群的代码。
我不知道是什么原因导致某些区域拆分失败,但是当我尝试将一个区域从一个区域服务器移动到另一个区域服务器时,在区域服务器中发现错误消息:
我想移动的区域是c3ebb018b9c3fc101a7b9def9100fb5f,但错误是找不到区域32ef153360b7a9499e555a7937418ee7中的文件,后来我发现区域c3ebb018b9c3fc101a7b9def9100fb5f是区域32ef153360b7a9499e555a7937418ee7的子区域。
然后我检查了hdfs,我发现父区域丢失了,并且它的子区域中存在指向父存储文件的引用文件。也就是说,子区域中的引用文件指向一些不存在的文件。
因此,region server在多个区域中找到了引用文件,但找不到父区域,然后抛出了此异常。
最后,我删除了分割区域的参考文件,平衡器开始正常工作,但不知道是否有数据丢失。
yhuiod9q2#
转到hbase shell并运行命令
balancer
. 这将运行平衡器一次。它返回true(成功)或false(有问题)。如果您有问题,请检查是否有区域卡在过渡中。平衡器可以定期运行,使用
balance_switch
在hbase shell中。