【问题标题】:Rejecting buffered Puts in HBase HTable instance (while having the autoFlush set on false)?拒绝 HBase HTable 实例中的缓冲放置(同时将 autoFlush 设置为 false)?
【发布时间】:2014-06-10 19:20:39
【问题描述】:

我正在编写一个通过 [Java HBase 客户端(版本 0.94.16)][1] 与 HBase 通信的 Java 应用程序。在HTable 实例上,我已经将setAutoFlush 设置为false,以便Puts 在每次调用put 方法后被缓冲而不是刷新。我使用这个Put 缓冲区来收集相关数据,以便可以立即调用flushCommits 方法将它们一起刷新。但是在我的应用程序中(在数据收集过程中)存在一种情况,当我发现这些相关数据无法完成时,我想清除已填充的Puts 缓冲区,而不是刷新不完整的数据集。

所以我的问题是:是否有任何有效的方法(在 Java HBase 客户端中)如何清除 HTable 实例的 Puts 缓冲区(丢弃其中的数据)(不刷新)?我知道如何自己实现这个 Puts 缓冲区,但我希望在 Java HBase 客户端范围内看到一些解决方案。感谢您的建议。

【问题讨论】:

    标签: java hbase


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 2011-07-29
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      相关资源
      最近更新 更多