0

HBase 支持单行原子事务。
用于实际检查。我写了以下代码

    Increment inc=new Increment();//For writing it to WAL
    inc.getWritetoWAL(); 
    Put p = new Put(Bytes.toBytes("name10"));
    p.add(Bytes.toBytes("cf"), Bytes.toBytes("name"),Bytes.toBytes("Some Value 10"));
    table.setAutoFlush(false);
    table.put(p);
    table.close();

为了检查恢复情况,我在执行(在 eclipse 中调试) table.put(p)后立即停止了 hbase,当我重新启动 hbase 时,表中没有更新新行。根据 HBase 中的文档,一旦它写入 memstore(cache),尽管发生崩溃,它可以恢复,但在这里它没有恢复,尽管 WAL 已启用.....
我的理解有什么问题.....
谢谢提前回复。。。。

4

1 回答 1

0

上面的代码发生的情况是客户端永远不会将 put 提交到服务器,因此 HBase 永远不会将其写入 WAL,它无法恢复......

table.setAutoFlush(false)在看跌期权上方的行中。如果您查看文档,它会说:

“执行大量 Puts 时,请确保在 HTable 实例上将 setAutoFlush 设置为 false。否则,Puts 将一次发送一个到 RegionServer。通过 htable.add(Put) 和 htable.add( Put) 在同一个写入缓冲区中结束。如果 autoFlush = false,则在写入缓冲区被填满之前不会发送这些消息。要显式刷新消息,请调用 flushCommits。在 HTable 实例上调用 close 将调用 flushCommits。

因此,虽然在这种情况下通常将 AutoFlush 设置为 false 是好的,但这意味着 put 尚未发送到服务器。

于 2013-03-16T18:28:52.273 回答