我一直在研究HBase,我目前正在寻找理解HBase读取路径如何工作的挑战。我对它是如何工作有基本的了解。但是,我不清楚它是如何读取多个HFiles检查布隆过滤器的。什么是元区块的目的,hbase如何使用它来读取数据。什么是hfiles中索引的目的,以及它是如何使用的?
因此需要你帮助理解这个概念。
非常感谢您的时间。感谢
答案 0 :(得分:4)
如果读取时有多个HFile,HBase将检查相关行是否存在。如果它在那里,HBase将从所有HFile(以及来自memstore)读取该行,以便客户端始终获取最新数据。对不起我没有得到block filters
的事情。你能指点一下你读过这个的来源吗?这将帮助我为您提供完整的答案。(您的意思是布卢姆过滤器吗?)
metablock的目的是保留大量数据。 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)
HTH