Hadoop HBase中的恢复
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"));
谢谢你的实际检查。我已经编写了以下代码
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提供的信息(非常有用)。我已经修改了那部分代码,仍然面临问题…你能检查一下这个链接吗