如何解决在 JAVA 中异步放置数据期间捕获 Hbase 异常
我使用表 table-A
和 table-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 举报,一经查实,本站将立刻删除。