2013-06-27 18 views
3

我一直在做一些关于HBase的研究,而且我目前在理解HBase读取路径如何工作时发现了一些挑战。我对它是如何工作有一个基本的了解。但是,我不清楚它是如何读取多个HFile检查bloom过滤器的。元区块的目的是什么,hbase如何使用它来读取数据。 hfiles中索引的目的是什么,以及如何使用它?需要帮助了解HBase读取路径

因此需要你的帮助来理解这个概念。

您的时间非常感谢。谢谢

回答

4

如果在读取时有多个HFile,HBase将检查相关行是否存在。如果在那里,HBase将从所有HFile(也从memstore)读取该行,以便客户端始终获取最新数据。我很抱歉没有得到block filters的东西。您能否指出我在哪里阅读过这方面的资料?这将有助于我为您提供完整的答案(您的意思是布卢姆过滤器?)

元区块的目的是保持大量的数据。 HFile使用元组来存储BloomFilter,并且字符串键与每个元区块相关联。 Metablocks保存在内存中直到调用HFile.close()。

为元区块编写索引以使读取更快。这些索引包含n个记录(其中n是块数)以及块信息(块偏移,大小和第一个键)。 最后,一个固定文件预告片被写入HFile。它包含所有HFile指数,HFile版本,压缩编解码器等的偏移量和计数。现在,当首先开始读取时,HFile.loadFileInfo()被调用,并且之前写入的文件尾随所有索引都被加载到内存中。它允许有效地查询关键字。然后在HFileScanner的帮助下,客户端寻找指定的密钥,然后遍历它读取数据。

我想向您指出帮助理解这些事情的链接。希望你会发现他们有用。

Link 1: Apache HBase I/O – HFile (Cloudera)

Link 2: HBase I/O: HFile (th30z)

Link 3: Scanning in HBase

HTH

+0

抱歉它是一个错字:) – Maverick

+0

非常感谢,它帮助约Hfiles了很多的了解。在读取路径上需要更多解释。例如,如果我们有5个Hfiles,并且2个Hfiles包含我们正在寻找的密钥...并且说出这个密钥,memstore中也存在一些值,您可以这样解释,流量将如何?将盛开的过滤器存在于5个HFile中加载到内存中? – Maverick

+0

欢迎您女士:) ..让我试试..如果您有5个HFile,那么在正常情况下,所有5个文件都将以并行5种方式扫描以获得特定的行,这意味着您正在做5个磁盘读取。但是如果你启用了BF功能,你的磁盘读取量将减少到仅包含特定行的文件,即在这种情况下为5-2。所有打开的HFile将被加载BF。这听起来不错吗?还是我需要进一步阐述它? – Tariq