HBase中的恢复

时间:2013-03-15 08:36:00

标签: hadoop hbase

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提前回复.....

1 个答案:

答案 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尚未发送到服务器。