【问题标题】:apache phoenix DoNotRetryIOExceptionapache phoenix DoNotRetryIOException
【发布时间】:2016-03-04 11:52:29
【问题描述】:

当我运行 sql 创建表时,如下所示:

    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 有问题,运行时出现错误。但是,虽然抛出了异常,但是创建了这个表,并且这个表和用这个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)
    )

很遗憾,执行delete tableselect table时都抛出了follow exception,我无法删除这个表。

    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

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

【问题讨论】:

    标签: phoenix


    【解决方案1】:

    我想我以前遇到过这个问题。首先,备份你的数据库(以防我的指令不起作用:)

    第二:

    hbase shell

    然后使用 hbase 命令禁用然后删除表。

    disable ...

    drop ...

    执行此操作后,尽管 HBase 中不存在该表,但该表仍可能显示在 Phoenix 中。这是因为 Phoenix 将元数据缓存在 HBase 表中。所以现在你必须找到 Phoenix 元数据表并删除它(它会在你下次启动 Phoenix 时重新生成)。

    https://mail-archives.apache.org/mod_mbox/phoenix-user/201403.mbox/%3CCAAF1JditzYY6370DVwajYj9qCHAFXbkorWyJhXVprrDW2vYYBA@mail.gmail.com%3E

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 2016-03-11
      • 2016-04-28
      • 2018-01-23
      相关资源
      最近更新 更多