首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HBase:数据是如何以排序方式写入HFile的?

HBase:数据是如何以排序方式写入HFile的?
EN

Stack Overflow用户
提问于 2014-11-02 04:58:52
回答 1查看 1.4K关注 0票数 4

我对HFiles有一个相当基本的怀疑。

当启动put/insert请求时,该值首先写入WAL,然后写入memstore。memstore中的值以与HFile相同的排序方式存储。一旦memstore满了,它就会被冲进一个新的HFile中。

现在,我已经读到HFile按排序顺序存储数据,即顺序行键将在彼此的旁边。

这是100%的事实吗?

例如:我首先用行键1到1000来写行,但行键500除外。假设memstore现在已经满了,所以它将创建一个新的HFile,称为HFile1。现在,这个文件是不可变的。

现在,我将编写行1001至2000,然后编写行键500。假设memstore已满,并将其写入HFile,则称为HFile2。

是这样发生的吗?

如果是,则行键500不在HFile1中,因此HFiles中的行键没有按排序顺序排列。那么,原来的粗体说法是正确的吗?

那么,当读取发生时,读取是如何发生的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-02 21:44:55

HFile按排序顺序存储数据,即顺序行键将彼此相邻。 这是100%的事实吗?

是的,这是百分之百的准确。在单个RowKeys中的HFile总是被排序的。

我将写1001行到2000行,然后写行键500。假设memstore已满,并将其写入HFile,则称为HFile2。 是这样发生的吗?

是的,现在500人进入了第二个HFile的顶端。

如果是,则行键500不在HFile1中,因此HFiles中的行键没有按排序顺序排列。那么,原来的粗体说法是正确的吗?

是的,单个HFile中的行键总是排序的。HBase周期性地执行压实,这将合并多个HFiles并将它们重写为单个HFile,这个新的HFile (压缩的结果)也被排序。

那么,当读取发生时,读取是如何发生的呢?

在读取时,如果一个存储有多个HFile,HBase将从所有HFiles读取该行(检查该行是否在那里,如果已读取)以及从HFiles存储读取该行。这样它就能得到最新的数据。

HBase权威指南对HBase读取路径的工作原理有很好的解释。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26696212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档