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中调试)后立即停止了hbase table.put(p),当我重新启动hbase时,新行未在表中更新。根据HBase中的文档,一旦它写入memstore(缓存),它就可以恢复,虽然崩溃发生但是这里虽然已经启用了WAL,但它还没有恢复.....
我的理解是否有任何错误.....
Thanx提前回复.....
答案 0 :(得分:0)
上面的代码会发生什么变化,客户端永远不会将put提交给服务器,因此HBase永远不会将它写入WAL而不能恢复...
您在汇率上方的行中有table.setAutoFlush(false)
。如果你check out the documentation说:
“执行大量Puts时,请确保setAutoFlush设置为 您的HTable实例上为false。否则,Puts将被发送一个 到RegionServer的时间。通过htable.add(Put)添加添加 htable.add(Put)在同一个写缓冲区中结束。如果autoFlush = false,在填充写缓冲区之前不会发送这些消息。要显式刷新消息,请调用flushCommits。打电话给我 HTable实例将调用flushCommits。“
因此,在这种情况下,通常将AutoFlush设置为false是好的,这意味着put尚未发送到服务器。