Hadoop HBase中的恢复

Hadoop HBase中的恢复,hadoop,hbase,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"));

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。put(p)当我重新启动hbase时,表中的新行不会更新。根据HBase中的文档,一旦写入memstore(缓存),它可以恢复,尽管崩溃发生了,但在这里,它无法恢复,尽管WAL已启用……
我的理解有什么错误吗……

Thanx提前回复

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

在put上方的行中有
table.setAutoFlush(false)
。如果你说:

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

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

Thanx提供的信息(非常有用)。我已经修改了那部分代码,仍然面临问题…你能检查一下这个链接吗