HBase中单表的数据量通常可以达到TB级或PB级,但大多数情况下数据读取可以做到毫秒级。HBase是如何做到的哪?要想实现表中数据的快速访问,通用的做法是数据保持有序并尽可能的将数据保存在内存里。HBase也是这样实现的。
对于海量级的数据,首先要解决存储的问题。
数据存储上,HBase将表切分成小一点的数据单位region,托管到RegionServer上,和以前关系数据库分区表类似。但比关系数据库分区、分库易用。这一点在数据访问上,HBase对用户是透明的。
数据表切分成多个Region,用户在访问数据时,如何找到该条数据对应的region呢?查找流程如下:
在HBase 0.94以前的版本中,有两个特殊的表,-Root-和.Meta. ,用来查找各种表的region位置在哪里。-Root-和.Meta.也像HBase中其他表一样会切分成多个region。-Root-表比.Meta更特殊一些,永远不会切分超过一个region。-ROOT-表的region位置信息存放在Zookeeper中,通过Zookeeper可以找到-ROOT-region托管的RegionServer。通过-ROOT-表就可以找到.META.表region位置。.META表中存放着表切分region的信息。HBase 0.98以后,-ROOT-表被移除,直接将.Meta表region位置信息存放在Zookeeper中。Meta表更名为hbase:meta,部分内容如下:
hbase(main):021:0> scan 'hbase:meta'
ROW COLUMN+CELL
crawler_data,,1434369403755.1cd1e7575017ba6d column=info:regioninfo, timestamp=1434369404626, value={ENCODED => 1cd1e7575017ba6d25fe97416f329503, NAME => 'crawler_data,,143436
25fe97416f329503. 9403755.1cd1e7575017ba6d25fe97416f329503.', STARTKEY => '', ENDKEY => '14341050600001033470209693090480'}
crawler_data,,1434369403755.1cd1e7575017ba6d column=info:seqnumDuringOpen, timestamp=1434369404761, value=\x00\x00\x00\x00\x00\x00\x8C9
25fe97416f329503.
crawler_data,,1434369403755.1cd1e7575017ba6d column=info:server, timestamp=1434369404761, value=hdpnode5.devgbg:60020
找到数据对应region托管的RegionServer以后,客户端就和RegionServer交互了。Meta表很好的解决了region定位的问题。
RegionServer读取region数据时,必须重新衔接持久化到硬盘上的HFile和内存中MemStore时的数据。使用BlockCache缓存HFile里读入内存的频繁访问的数据,避免硬盘读。读取时,首先检查MemStore等修改的队列,然后检查BlockCache看包含该行的Block是否最近被访问过,最后访问硬盘上的对应HFile。
HFile物理存放形式是一个Block的序列外加这些Block的索引。Block是建立索引的最小数据单位,也是从硬盘读取的最小数据单位。从HBase里读取一个Block需要先在索引上查找一次该 Block,然后从硬盘读出。Block的大小可以在列族级别设定,默认值是64KB。如果业务场景主要是随机查询,可以把Block调小,生成细粒度的Block索引,提高查询性能,代价是Block索引会消耗更多的内存。如果经常需要使用MR顺序扫描表,一次读取多个Block,大一些Block设置性能更好,同时节省索引内存开销。
存储在硬盘的HFile按Block创建索引,在查询特定的行时,使用Block索引查找应该读取HFile的数据块,效果还是有限的。Block数据块的默认大小是64KB,这个大小也不调整太多。如果查询特定的行,只在整个数据块的起始行键上建立索引粒度还是不够。特定行在Block数据块中的查找方法,HBase还提供了布隆过滤器。布隆过虑器允许对存储在每个数据块的行键做一个反向测试。当某行被请求时,先检查布隆过滤器,看看该行是否不在这个数据块中。HBase提供了行级布隆过滤器和列限定符级布隆过滤器。列限定符级布隆过滤器会增加更多的内存开销。
总结一下,HBase通过切分表、BlockCache,Block索引和布隆过滤器等技术,实现了单表海量数据的毫秒级查询。
相关推荐
本文当是一个基于HBase的海量数据的实实时查询系统的原理分析。详细的介绍了大数据查询的原理。
基于HBase的车联网海量数据查询.pdf
本文档详细的描述了如何采用HBase存储海量图片,以及如何将大批量的小文件写成sequenceFile文件格式。
手把手视频详细讲解项目开发全过程,需要的小伙伴...7. 基于Phoenix消息数据查询 第三章 HBase高级 1. 重要工作机制 2. HBase批量装载——Bulk load 3. HBase的协处理器(Coprocessor) 4. HBase事务 5. HBase数据结构
hbase海量数据的全量导入方法,大数据导入。
hbase分页查询实现.pdf
Hbase有着先天的优势和先天的劣势,而劣势就是其较差的数据定位能力,也就是数据查询能力。因为面向列的特点,Hbase只能单单地以rowkey为主键作查询,而无法对表进行多维查询和join操作,并且查询通常都是全表扫描,耗费...
hbase分页查询实现
基于HBase的海量能耗数据存储系统,姜治光,,云计算、物联网等新概念与新技术的蓬勃发展,推动了数据中心建设的高速发展,大量能源消耗设备将产生大规模的能源消耗数据。针对
java操作Hbase之从Hbase中读取数据写入hdfs中源码,附带全部所需jar包,欢迎下载学习。
基于Django LayUI HBase的文献数据挖掘系统.zip
#资源达人分享计划#
这是hbase对数据存储的代码实现,让你轻松秒懂hbase,
包含了hbase的数据查询,获取,删除等操作等
springboot搭建的hbase可视化界面 支持hbase的建表与删除 支持根据rowkey查询数据
Phoniex 可以让开发者在HBase数据集上使用SQL查询。Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集,对于简单查询来说,性能甚至胜过Hive。 标签:Phoniex
基于HBase和Spark构建企业级数据处理平台.pdf
在HBase基础上,提出了一个基于索引的气象结构化数据查询优化架构HBase4M(HBase for Meteorology)。首先,根据HBase存储特性设计表结构;然后,利用协处理器建立和维护辅助索引,将字段查询转化为对索引表的行键...
hbase备份和数据恢复,hbase与hive的互导,hbase和hdfs互导。
1、有多个工具可选择使用