HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
一、Hbase获取查询条件结果的过程
1、两张特殊表:-ROOT- & .META.
.META. 记录用户表的Region信息,同时,.META.也可以有多个region
-ROOT- 记录.META.表的Region信息,但是,-ROOT-只有一个region
Zookeeper 中记录了-ROOT-表的location
2、客户端访问数据的流程:
Client -> Zookeeper -> -ROOT- -> .META. -> 用户数据表
3、多次网络操作,不过client端有cache缓存
二、Hbase架构
组成部件说明
1、Client:
使用HBase RPC机制与HMaster和HRegionServer进行通信
Client与HMaster进行通信进行管理类操作
Client与HRegionServer进行数据读写类操作
2、Zookeeper:
Zookeeper Quorum存储-ROOT-表地址、HMaster地址
HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况
Zookeeper避免HMaster单点问题
3、HMaster:
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行,主要负责Table和Region的管理工作:
3.1 管理用户对表的增删改查操作
3.2 管理HRegionServer的负载均衡,调整Region分布
3.3 Region Split后,负责新Region的分布
3.4 在HRegionServer停机后,负责失效HRegionServer上Region迁移
4、HRegionServer:
HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据。
任何一项新技术并非救命稻草,一抹一擦立马药到病除的百宝箱,并非使用Spring或者NOSQL的产品就神乎其神+五光十色,如果那样基本是扯淡。同类型产品中不管那种技术最终要达到的目的是一样的,通过新的技术手段你往往可能避讳了当前你所需要面对的问题,但过后新的问题又来了。也许回过头来看看还不如在原来的基础上多动动脑筋想想办法做些改良可以得到更高的回报。
传统数据库是以数据块来存储数据,简单来说,你的表字段越多,占用的数据空间就越多,那么查询有可能就要跨数据块,将会导致查询的速度变慢。在大型系统中一张表上百个字段,并且表中的数据上亿条这是完全是有可能的。因此会带来数据库查询的瓶颈。我们都知道一个常识数据库中表记录的多少对查询的性能有非常大的影响,此时你很有可能想到分表、分库的做法来分载数据库运算的压力,那么又会带来新的问题,例如:分布式事务、全局唯一ID的生成、跨数据库查询等,依旧会让你面对棘手的问题。如果打破这种按照行存储的模式,采用一种基于列存储的模式,对于大规模数据场景这样情况有可能发生一些好转。由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,可以动态增加,并且列为空就不存储数据,节省存储空间。每个字段的数据按照聚集存储,能大大减少读取的数据量,查询时指哪打哪,来的更直接。无需考虑分库、分表 Hbase将对存储的数据自动切分数据,并支持高并发读写操作,使得海量数据存储自动具有更强的扩展性。Java中的HashMap是Key/Value的结构,你也可以把HBase的数据结构看做是一个Key/Value的体系,话说HBase的区域由表名和行界定的。在HBase区域每一个"列族"都由一个名为HStore的对象管理。每个HStore由一个或多个MapFiles(Hadoop中的一个文件类型)组成。MapFiles的概念类似于Google的SSTable。 在Hbase里面有以下两个主要的概念,Row key 和 Column Family,其次是Cell qualifier和Timestamp tuple,Column family我们通常称之为“列族”,访问控制、磁盘和内存的使用统计都是在列族层面进行的。列族Column family是之前预先定义好的数据模型,每一个Column Family都可以根据“限定符”有多个column。在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,最新的数据版本排在最前面 。
以上为Hbase的基本需要掌握的知识点。
原文地址:http://11926581.blog.51cto.com/11916581/1860288