HBase:数据如何以有序的方式写入HFile?

时间:2014-11-02 04:58:52

标签: hbase hfile

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

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

现在,我已经读过 HFile按排序顺序存储数据,即连续的rowkeys将彼此相邻

这100%是真的吗?

例如:我首先使用rowkeys 1到1000写行,但rowkey 500除外。假设memstore现已满,因此它将创建一个新的HFile,称之为HFile1。现在,这个文件是不可变的。

现在,我将写行1001到2000,然后我写rowkey 500.假设memstore已满并写入HFile,称之为HFile2。

那么,这是怎么回事?

如果是,则rowkey 500不在HFile1中,因此HFiles中的rowkeys不按排序顺序排列。那么,粗体的原始陈述是正确的吗?

因此,当读取发生时,读取是如何发生的?

1 个答案:

答案 0 :(得分:5)

  

HFile按排序顺序存储数据,即顺序的rowkeys将彼此相邻。

     

这100%是真的吗?

是的,这是100%准确的。在单个HFile中的RowKeys总是排序。

  

我会写行1001到2000,然后我写rowkey 500.假设memstore已满并写入HFile,称之为HFile2。

     

那么,这是怎么回事?

是的,现在有500人登上第二名HFile的顶端。

  

如果是,则rowkey 500不在HFile1中,因此HFiles中的rowkeys不按排序顺序排列。那么,粗体的原始陈述是正确的吗?

是的,总是对单个HFile中的行键进行排序。 HBase定期执行compactions,它将合并多个HFile并将它们重写为一个HFile,这个压缩的新HFile也会被排序。

  

因此,当读取发生时,读取是如何发生的?

在读取时,如果存储有多个HFile,HBase将从所有HFile读取该行(检查该行是否存在,如果是这样),也从memstore读取。所以它可以获得最新的数据。

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