2016-03-01 122 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