我一直在对HBase进行一些研究,目前我发现在理解HBase读取路径如何工作方面存在挑战。我对它的工作原理有基本的了解。但是,我不清楚它是如何读取多个HFile来检查bloom过滤器的。元块的用途是什么,hbase如何使用它来读取数据。hfiles中索引的目的是什么?它是如何使用的?
因此需要你的帮助来理解这个概念。
非常感谢您抽出时间。感谢
如果在读取时有多个HFile,HBase将检查有问题的行是否存在。如果它在那里,HBase将从所有的HFile(以及memstore)中读取该行,以便客户端始终获得最新的数据。很抱歉我没有完全理解block filters
的内容。你能给我指一下你读到的关于这件事的来源吗?这将有助于我为你提供完整的答案。(你是指Bloom Filter吗?)
元块的目的是保存大量的数据。HFile使用元块来存储BloomFilter,并且字符串键与每个元块相关联。元块一直保存在内存中,直到调用HFile.close()为止。
为元块编写索引是为了加快读取速度。这些索引包含具有块信息(块偏移、大小和第一关键字)的n个记录(其中n是块的数目)。最后,一个固定文件尾部会写入HFile。它包含所有HFile索引、HFile版本、压缩编解码器等的偏移量和计数。现在,当读取开始时,首先调用所有HFile.loadFileInfo()
,并将之前写入的File Trailer与所有索引一起加载到内存中。它允许有效地查询密钥。然后在HFileScanner
的帮助下,客户端查找指定的密钥,并对其进行迭代以读取数据。
我想向你指出那些有助于理解这些事情的联系。希望你会发现它们有用。
链接1:Apache HBase I/O–HFile(Cloudera)
链路2:HBase I/O:HFile(th30z)
链接3:HBase 中的扫描
HTH