java - HBase 数据持久化

标签 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。存储在磁盘上的数据其实就是这些HFiles。

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

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

文章说“一个KeyValue对写入一个block之前,key的顺序必须比前一个大”,我也是没看懂。

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

谁能帮我理解这一点。

最佳答案

"Before a KeyValue pair is written to a block, the order ..."

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

当请求到来时,hbase会同时查看之前的数据和新数据(你说的“事务”),但是会返回时间戳较新的新数据。

"Before a KeyValue pair is written to a block, the order of the key must be bigger than the previous one"

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

关于java - HBase 数据持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167631/

相关文章:

java - (Java) RegEx 从 CSS 获取 URLs?

java - 循环无法启动

java - 在 Hadoop 分布式缓存中创建和放置文件

hadoop - 如何将 mapreduce 输出存储在不同的节点中???

hadoop - 如何从客户端Windows计算机访问hadoop群集(unix)

java - 从文件加载 RSA 私钥时出现 InvalidKeySpecException

java - CardLayout - 定位组件

Azure.CloudService 2.7 与 Visual Studio 2015 不兼容

ssl - 如何在 GKE 上的 RabbitMQ UI 管理中添加 SSL?

kubernetes - Helm v3 在私有(private)仓库中找不到我的图表