HBase数据持久性

时间:2013-08-11 00:32:04

标签: java hadoop cloud storage hbase

我一直试图了解Hbase的工作原理。特别是 - 数据如何存储到磁盘。

我在网上看过文章,其中两篇帮助了我 -

http://th30z.blogspot.com/2011/02/hbase-io-hfile.html?spref=tw

http://www.slashdocs.com/iyxmiz/hfile-a-block-indexed-file-format-to-store-sorted-key-value-pairs.html

我还有一些问题,可能是因为我对HBase不太了解。以下是我从阅读内容中得到的结果 - 每个事务 - (Put / Get / Delete)都在Memstore中保存为KeyValue,然后在刷新时写入StoreFiles / Hfiles。存储在磁盘上的数据实际上就是这些HFile。

现在,KeyValue类的结构指定 - 需要存储的数据(如果有),键和操作类型(Put / Get / Delete)。 HFiles中的数据块本身代表KeyValues(“rowkey”是Key的一部分)。

正如我所看到的,当这些KeyValues被持久化时,它更像是保存事务而不是更改现有数据。何时处理/合并此类交易以产生一行。我认为它可能是在压缩过程中,但后来,我不知道如何处理写入HFile但未压缩的数据的请求。

当文章说“在KeyValue对写入块之前,键的顺序必须大于前一个。”

时,我也不理解它。

我认为我在理解HBase的过程中做了一些错误的假设。

有人可以帮助我理解这一点。

1 个答案:

答案 0 :(得分:1)

  

“在将KeyValue对写入块之前,订单......”

是的,新数据可以视为事务,但它们与压缩后的数据格式/结构相同。这意味着,这些“交易”与旧数据共存,除了时间戳之外与旧数据没有区别。

当请求到来时,hbase将查看以前的数据和新数据(您提到的“事务”),但将返回时间戳较新的新数据。

  

“在将KeyValue对写入块之前,键的顺序必须大于前一个键”

我想这里的重点是,在将块写入磁盘之前,密钥在memstore(内存缓存)中排序,以确保“密钥的顺序必须大于前一个”。