hbase是bigtable的开源山寨版本。hbase建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
1.hbase逻辑视图
hbase的逻辑介于nosql和RDBMS之间,hbase的列不是表格的schema,列族才是,每个列族可以拥有多个列。所以放数据的时候,我们需要指定rowkey、列族和列。而每个rowkey、列族和列确定的数据又有多个时间版本。
你会觉得其中第三个列族好像有的列是空的,没有数据,但是和关系型数据库不一样的是,就算这个列式空的也不会占用多余的空间,而且还可以随时添加列。
2.物理存储
Table中的所有行都按照row key的字典序排列,Table 在行的方向上分割为多个Hregion。
Hregion按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,Hregion就会等分会两个新的Hregion,当table中的行不断增多,就会有越来越多的Hregion。
Hregion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的。
HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。事实上,HRegion由一个或者多个Store组成,每个store保存一个columns family。每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。
3.系统架构
Client
包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如region的位置信息。
Zookeeper
第一,保证任何时候,集群中只有一个master;
第二,存贮所有Region的寻址入口;
第三,实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master;
第四,存储Hbase的schema,包括有哪些table,每个table有哪些column family。
Master
第一,为Region server分配region;
第二,负责region server的负载均衡;
第三,发现失效的region server并重新分配其上的region;
第四,GFS上的垃圾文件回收;
第五,处理schema更新请求。
Region Server
第一,Region server维护Master分配给它的region,处理对这些region的IO请求;
第二,Region server负责切分在运行过程中变得过大的region。
可以看到,client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低。整个架构图就是这样: