2014-12-05 42 views
2

我是Hbase.Hbase的新手,對隨機更新(放入或刪除)表格很有用,但無法理解hbase如何執行該操作。由於hbase使用HDFS作爲其存儲,並且不可能更新HDFS中的任何內容。 Hbase使用memstore來更新記錄並首先將任何編輯寫入memstore.So MemStore包含任意數量的已更新行,按已排序的鍵順序排列。當它將數據轉儲到磁盤到hfile時,是否將此hfile全局排序hfiles。hbase隨機寫入工作原理

轉儲所有hfile後,hfile被複制到HDFS.Same問題的WAL編輯日誌.WAL日誌文件也被複制到HDFS或不是。對於每一個更新,我們將更新複製到HDFS。

回答

5

這些博客文章可以幫助你 http://blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/ http://blog.cloudera.com/blog/2012/06/hbase-write-path/

但基本上,你發送寫入沃爾瑪(恢復)認沽(鍵,值)對的memstore。 當memstore達到閾值時,memstore按排序順序寫入磁盤(hfile)。有一段時間後,你在磁盤上有多個hfiles。既然你知道每個文件都有排序的內容,你可以執行(排序)合併來查詢你的數據。

WAL僅在崩潰的情況下使用,如果您的數據位於memstore中且機器崩潰,您擁有的唯一副本位於WAL中。一旦你的數據被刷新,包含memstore數據的WAL可以被刪除。

+0

感謝answer.this博客解釋了所有... 但是對序列文件有更多疑問....序列文件中的每個追加都會被複制到所有塊。 – 2014-12-05 09:22:20

+1

這是HDFS的一部分。 HDFS正在進行與HBase類似的工作。您使用OutputStream編寫數據。數據被緩衝到塊大小,然後一旦塊達到該大小就被複制到N臺機器。或多或少是它是如何工作的,你必須認爲一切都是不變的,所以你沒有「記錄」的概念,當你在內存中添加一些東西時,當它達到一個閾值時,數據被合併(在塊),然後複製。 – th30z 2014-12-05 09:58:11

+0

非常感謝..這個問題讓我頭腦發熱了整整一天.. 從更多的閱讀中我得到了與所有區域共享寫入wal的相同的HLog實例。我認爲wal實例(fsOutputStream)在任何寫入之間都沒有關閉。 – 2014-12-05 10:18:41