我正在编写一个Java应用程序,通过Java客户端与HBase通信(版本0.94.16)。在HTable实例中,我已经将setAutoFlush设置为false,以便在put方法的每个调用之后缓冲Puts,而不是刷新。我使用这个Put缓冲区来收集相关数据,这样它们就可以同时被刷新到一起,调用flushCommits方法。但是,在我的应用程序中(在数据收集过程中),当我发现这些相关数据无法完成时,我想清除已填充的Put缓冲区,而不是刷新不完整的数据集。
因此,我的问题是:是否有任何有效的方法(在HBase客户机中),如何清除HTable实例的Puts缓冲区(丢弃其中的数据)(不进行刷新)?我知道如何实现这个Puts缓冲区,但是我希望看到一些在HBase客户机范围内的解决方案。谢谢你的建议。
发布于 2015-03-03 23:46:02
BufferedMutator似乎没有在JVM或机器故障之外丢弃Put缓冲区的任何东西。
我认为唯一的方法就是让你自己的PutBuffer
public class PutBuffer {
public PutBuffer(ConnectionFactory connectionFactory) {…}
public void setFlushTimeout(int millis) {…}
public int getFlushTimeout() {…}
public void addPut(TableName table, Put put) {…}
public void discardBuffer(TableName table) {…}
public void flush() {…}
}https://stackoverflow.com/questions/24149253
复制相似问题