在 JAVA 中异步放置数据期间捕获 Hbase 异常

问题描述

我使用表 table-Atable-B 创建了本地 HBase。

之后,我编写了代码,使用 JAVA(在 put 中包含 HBaseClient)将数据org.hbase.async 发送到 HBase,如下所示。

private HBaseClient client;

// ... (Somehow init client)

public Deferred<Object> asyncput(PutRequest request,Object rowKey) {
        return client.put(request)
                .addCallback(new CloseCallback<>())
                .addErrback(new CloseErrCallback<>(rowKey,Boolean.FALSE));
    }

private class CloseCallback<R> implements Callback<R,R> {
        @Override
        public R call(R result) {
            return result;
        }
    }

private class CloseErrCallback<R> implements Callback<R,Exception> {
        private R defaultValue;
        private Object rowKey;

        CloseErrCallback(Object rowKey,R defaultValue) {
            this.rowKey = rowKey;
            this.defaultValue = defaultValue;
        }

        public R call(final Exception e) {
            if (e instanceof RpcTimedOutException) {
                log.info("{},rowKey : {}",e.getMessage(),rowKey);
            } else if(e instanceof NonRecoverableException){
                log.error("RPC Failed - rowkey:{} {}",rowKey,e);
            } else {
                log.error("RPC Failed {} {}",e,rowKey);
            }
            return defaultValue;
        }
    }

当我放入具有表名 table-C(尚未创建)的数据时,它不会给出类似 ERROR: UnkNown table错误,但只会重新尝试放入数据直到成功。

我想要做的是捕获特定的异常,例如 ERROR: UnkNown table 或其他异常以防止重试。我希望 CloseErrCallback 可以捕获这些异常,但它对我没有帮助。

如何知道异步将数据放入 HBase 时是否有异常?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)