拒绝HBase HTable实例中的缓冲Puts(同时将autoFlush设置为false)?

时间:2014-06-10 19:20:39

标签: java hbase

我正在编写一个通过[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的范围内看到一些解决方案。谢谢你的建议。

1 个答案:

答案 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() {…}
}