hbase数据持久化

voase2hg  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(448)

我一直在努力理解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。存储在磁盘上的数据实际上就是这些文件。
现在,keyvalue类的结构指定了-需要存储的数据(如果有)、键和操作类型(put/get/delete)。hfiles中的数据块本身表示键值(其中“rowkey”是键的一部分)。
在我看来,当这些键值被持久化时,它更像是保存一个事务,而不是对现有数据进行更改。此类事务何时处理/合并生成一行。我假设这可能是在压缩过程中,但是,我不知道如何处理对写入hfile但未压缩的数据的请求。
当文章说“在将键值对写入块之前,键的顺序必须比前一个大”时,我也不理解
我想我在理解hbase的过程中做了一些错误的假设。
有人能帮我理解吗。

djp7away

djp7away1#

在将键值对写入块之前,顺序
是的,新数据可以作为事务处理,但它们与压缩后的数据格式/结构相同。也就是说,这些“事务”与旧数据共存,除了时间戳之外,与旧数据没有区别。
当请求到来时,hbase将同时查看以前的数据和新数据(您提到的“事务”),但将返回时间戳较新的新数据。
在将键值对写入块之前,键的顺序必须大于上一个键的顺序
我想这里的重点是,在块写入磁盘之前,密钥在memstore(内存缓存)中进行排序,以确保“密钥的顺序必须大于上一个”。

相关问题