鉴于HBase是一个数据库,其文件存储在HDFS中,它如何能够随机访问HDFS中的单个数据?通过哪种方法完成了?
来自the Apache HBase Reference Guide:
HBase内部将您的数据放入索引" StoreFiles"存在于HDFS上以进行高速查找。有关HBase如何实现其目标的更多信息,请参见第5章,数据模型和本章的其余部分。
扫描这两个章节并没有显示这个问题的高级答案。
那么HBase如何实现对存储在HDFS中的文件的随机访问?
答案 0 :(得分:12)
HBase将数据存储在由其密钥索引(排序)的HFile中。给定随机密钥,客户端可以确定何时从区域服务器请求该行。区域服务器可以确定从哪个区域检索行,然后通过该区域进行二进制搜索以访问正确的行。这是通过提供足够的统计信息来了解块数,块大小,开始键和结束键来实现的。
例如:一个表可能包含10 TB的数据。但是,该表分为4GB大小的区域。每个区域都有一个开始/结束键。客户端可以获取表的区域列表,并确定哪个区域具有它正在查找的键。区域被分解为块,因此区域服务器可以通过其块进行二进制搜索。块本质上是密钥,属性,值,版本的长列表。如果您知道每个块的起始键是什么,则可以确定要访问的文件,以及字节偏移量(块)开始读取以查看您在二进制搜索中的位置。
答案 1 :(得分:0)
hbase访问hdfs文件。您可以查看网址以获取详细信息:http://hbase.apache.org/book/hfilev2.html