1.HBase体系架构
HBase的服务器体系结构遵循简单的主从服务器架构,它由HRegion服务器(HRegion Server)群和HBase Master服务器(HBase Master Server)构成。HBase Master服务器负责管理所有的HRegion服务器,而HBase中所有的服务器都是通过ZooKeeper来进行协调,并处理HBase服务器运行期间可能遇到的错误。HBase Master Server本身不存储HBase中的任何数据,HBase逻辑上的表可能会被划分为多个HRegion,然后存储到HRegion Server群中,HBase Master Server中存储的是从数据到HRegion Server中的映射。
hbase架构可以简单通过一张图描述:
![](https://img.haomeiwen.com/i4070938/7d7fe2e0f5ebe61e.png)
Hbase基础组件说明:
HRegion
当表的大小超过设置值的时候,HBase会自动地将表划分为不同的区域,每个区域包含所有行的一个子集。对用户来说,每个表是一堆数据的集合,靠主键来区分。从物理上来说,一张表被拆分成了多块,每一块就是一个HRegion。我们用表名+开始/结束主键来区分每一个HRegion,一个HRegion会保存一个表里某段连续的数据,从开始主键到结束主键,一张完整的表是保存在多个HRegion上面的。
HMaster
管理HRegionServer,实现其负载均衡。
管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。
实现DDL操作(Data Definition Language,namespace和table的增删改,column familiy的增删改等)。
管理namespace和table的元数据(实际存储在HDFS上)。
权限控制(ACL)。
HRegionServer
存放和管理本地HRegion。
读写HDFS,管理Table中的数据。
Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
ZooKeeper集群协调系统
存放整个 HBase集群的元数据以及集群的状态信息。
实现HMaster主从节点的failover。
另外还有一些需要注意
HBase Client通过RPC方式和HMaster、HRegionServer通信;
一个HRegionServer可以存放1000个HRegion;
底层Table数据存储于HDFS中,而HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化;
数据本地化并不是总能实现,比如在HRegion移动(如因Split)时,需要等下一次Compact才能继续回到本地化。
2.HBase逻辑视图
HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family),每个列族有多个列,每个rowkey和一个列对应一个cell,每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。
表结构:
![](https://img.haomeiwen.com/i4070938/127ea2c0c66cffc6.png)
逻辑视图:
![](https://img.haomeiwen.com/i4070938/dc616b0966dae07d.png)
其实,我们把HBase想象成一个大的映射关系,再者,HBase存储的数据可以理解为一种key和value的映射关系,但有不是简简单单的映射关系那种,因为比如有各个时间戳版本等。
通过行键、行键+时间戳或行键+列(列簇:列修饰符),就可以定位特定是数据。
HBase是稀疏存储数据的,因此某些列可以是空白的。
列在列簇中依照字典排序。
下图中我们可以更加直观的理解:
![](https://img.haomeiwen.com/i4070938/931d1780ba0eb683.png)
网友评论