我用表table-A
和table-B
.
put
之后,我使用 JAVA(带有HBaseClient
in )编写了将数据写入 HBase 的代码,org.hbase.async
如下所示。
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 时如何知道是否有异常?