2016-03-01 160 views
0

当我运行该SQL创建表,如下所示:阿帕奇凤凰DoNotRetryIOException

CREATE TABLE FM_DAY(
     APPID VARCHAR NOT NULL, 
     CREATETIME VARCHAR NOT NULL, 
     PLATFORM VARCHAR NOT NULL, 
     USERCOUNT UNSIGNED_LONG, 
     LONGCOUNT UNSIGNED_LONG, 
     USERCOUNT UNSIGNED_LONG, 
     CONSTRAINT PK PRIMARY KEY (APPID,CREATETIME,PLATFORM) 
    ) 

这个SQL有错重复键USERCOUNT,当我运行出现错误。然而,尽管它thows一个例外,该表创建的,该表是完全一样与此SQL创建:

CREATE TABLE FM_DAY(
     APPID VARCHAR NOT NULL, 
     CREATETIME VARCHAR NOT NULL, 
     PLATFORM VARCHAR NOT NULL, 
     USERCOUNT UNSIGNED_LONG, 
     LONGCOUNT UNSIGNED_LONG, 
     CONSTRAINT PK PRIMARY KEY (APPID,CREATETIME,PLATFORM) 
    ) 

不幸的是,excuting都删除表选择表当后续的异常被扔,我不能放弃这张桌子。

Error: org.apache.hadoop.hbase.DoNotRetryIOException: FM_DAY: 34 
     at org.apache.phoenix.util.ServerUtil.createIOException(ServerUtil.java:84) 
     at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.dropTable(MetaDataEndpointImpl.java:1316) 
     at org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.callMethod(MetaDataProtos.java:10525) 
     at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7435) 
     at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:1875) 
     at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:1857) 
     at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:32209) 
     at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2114) 
     at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:101) 
     at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130) 
     at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107) 
     at java.lang.Thread.run(Thread.java:745) 
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 34 
     at org.apache.phoenix.schema.PTableImpl.init(PTableImpl.java:354) 
     at org.apache.phoenix.schema.PTableImpl.<init>(PTableImpl.java:276) 
     at org.apache.phoenix.schema.PTableImpl.makePTable(PTableImpl.java:265) 
     at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.getTable(MetaDataEndpointImpl.java:826) 
     at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.buildTable(MetaDataEndpointImpl.java:462) 
     at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.doDropTable(MetaDataEndpointImpl.java:1336) 
     at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.dropTable(MetaDataEndpointImpl.java:1289) 
     ... 10 more 

如果有人知道这种情况?我该如何删除这张表。 谢谢。

回答

0

我想我之前遇到过这个问题。首先,备份您的数据库(如果我的指示不工作:)

二:

hbase shell

然后使用HBase的命令来禁用,然后删除该表。

disable ...

drop ...

这样做后,表仍可能在菲尼克斯显示,尽管表中的HBase不存在。这是因为Phoenix将元数据缓存在HBase表中。所以现在你必须找到Phoenix元数据表并放下它(下次你启动Phoenix时它将被重新生成)。

https://mail-archives.apache.org/mod_mbox/phoenix-user/201403.mbox/%[email protected].com%3E