问题描述
我使用表 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 (将#修改为@)