2013-03-15 64 views
0

HBase支持單行原子事務。
用於實際檢查。我已經執行(在Eclipse中調試)的table.put(P)當我重新啓動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(); 

要檢查我已經停止HBase的恢復在桌子裏。根據HBase中的文檔,一旦它寫入memstore(緩存),它可以恢復,雖然崩潰發生,但在這裏它不恢復,雖然WAL已啓用.....
我的理解是否有任何錯誤....
Thanx提前答覆.....

回答

0

上面的代碼會發生什麼情況,客戶端永遠不會將提交提交給服務器,因此HBase永遠不會將它寫入WAL而不會將其恢復。 ..

你有table.setAutoFlush(false)在上面的行。如果你check out the documentation它說:

「在進行了大量看跌期權,確保setAutoFlush設置爲 虛假您HTable實例。否則,看跌期權將被一次發送一個在 到RegionServer的。如果autoFlush = false,則在填充寫入緩衝區之前不會發送這些消息爲了顯式地刷新消息,請使用htable.add(Put)和 將htable.add(Put)添加到相同的寫入緩衝區中。調用flushCommits。調用關閉 HTable實例將調用flushCommits。「

因此,雖然通常設置AutoFlush爲false在這種情況下是好的,但這意味着put不會發送到服務器。

+0

Thanx的信息(非常有幫助)。我已經修改了那部分代碼,仍然面臨着這個問題...你可以檢查這個鏈接[Click Here](http://stackoverflow.com/questions/15470122/how-recovery-works-in-hbase) – Rohit 2013-03-18 05:12:39