2014-12-05 144 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