我正在编写一个通过[Java HBase客户端(版本0.94.16)] [1]与HBase通信的Java应用程序。在HTable
实例上,我已将setAutoFlush
设置为false,以便在每次调用Put
方法后缓存put
而不是刷新。{1}}我使用此Put
缓冲区来收集相关数据,以便可以一次调用flushCommits
方法将它们刷新到一起。但是我的应用程序(在数据收集过程中)有一种情况,当我发现这些相关数据无法完成时,我想清除已填充的Put
缓冲区,而不是刷新不完整的数据集。
所以我的问题是:有没有任何有效的方法(在Java HBase客户端内)如何清除HTable
实例的Puts缓冲区(丢弃其中的数据)?(没有刷新)?我知道如何自己实现这个Puts缓冲区,但我希望在Java HBase Client的范围内看到一些解决方案。谢谢你的建议。
答案 0 :(得分:0)
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() {…}
}