假设hbase是一个数据库,其文件存储在hdfs中,那么它如何能够随机访问hdfs中的单个数据段呢?这是用什么方法完成的?从apache hbase参考指南:hbase在内部将数据放入hdfs上存在的索引“storefiles”中,以便进行高速查找。有关hbase如何实现其目标的更多信息,请参阅第5章“数据模型”和本章其余部分。浏览这两个章节并没有发现这个问题的高层次答案。那么hbase如何实现对hdfs中存储的文件的随机访问呢?
xa9qqrwz1#
hbase使用hfile访问hdfs文件。您可以查看url以获取详细信息:http://hbase.apache.org/book/hfilev2.html
bbuxkriu2#
hbase将数据存储在按键索引(排序)的hfiles中。给定一个随机密钥,客户机可以确定请求从哪个区域服务器获取行。区域服务器可以确定从哪个区域检索行,然后对该区域进行二进制搜索以访问正确的行。这是通过有足够的统计信息来知道块的数量、块大小、开始键和结束键来实现的。例如:一个表可能包含10 tb的数据。但是,表被划分为大小为4gb的区域。每个区域都有一个开始/结束键。客户机可以获取表的区域列表,并确定哪个区域具有它要查找的键。区域被分解成块,这样区域服务器就可以对其块进行二进制搜索。块本质上是键、属性、值和版本的长列表。如果知道每个块的起始键是什么,就可以确定要访问的一个文件,以及要开始读取的字节偏移量(块)是什么,以查看二进制搜索中的位置。
2条答案
按热度按时间xa9qqrwz1#
hbase使用hfile访问hdfs文件。您可以查看url以获取详细信息:http://hbase.apache.org/book/hfilev2.html
bbuxkriu2#
hbase将数据存储在按键索引(排序)的hfiles中。给定一个随机密钥,客户机可以确定请求从哪个区域服务器获取行。区域服务器可以确定从哪个区域检索行,然后对该区域进行二进制搜索以访问正确的行。这是通过有足够的统计信息来知道块的数量、块大小、开始键和结束键来实现的。
例如:一个表可能包含10 tb的数据。但是,表被划分为大小为4gb的区域。每个区域都有一个开始/结束键。客户机可以获取表的区域列表,并确定哪个区域具有它要查找的键。区域被分解成块,这样区域服务器就可以对其块进行二进制搜索。块本质上是键、属性、值和版本的长列表。如果知道每个块的起始键是什么,就可以确定要访问的一个文件,以及要开始读取的字节偏移量(块)是什么,以查看二进制搜索中的位置。