HBase为可伸缩海量数据存储而设计,实现面向在线业务的实时数据访问延迟。HBase的伸缩性主要依赖其可分裂的HRegion及可伸缩的分布式文件系统HDFS实现。

    HBase中,数据以HRegion为单位进行管理,也就是说应用程序如果想要访问一个数据,必须先找到HRegion,然后将数据读写操作提交给HRegion,由HRegion完成存储层面的数据操作。每个HRegion中存储一段key值区间[key1,key2]的数据,HRegionServer是物理服务器,每个HRegionServer上可以启动多个HRegion实例。当一个HRegion中写入数据太多,达到配置的阀值时,HRegion会分裂成两个HRegion,并将HRegion在整个集群中进行迁移,以使HRegionServer的负载均衡。

    所有HRegion的信息(存储的Key值区间,所在HRegionServer地址、访问端口号等)都记录在HMaster服务器上,为了保证高可用,HBase启动多个HMaster,并通过Zookeeper(一个支持分布式一致性的数据管理服务)选举出一个主服务器,应用程序通过Zookeeper获得HMaster的地址,输入Key值获得这个Key所在的HRegionServer地址,然后请求HRegionServer上的HRegion,获得需要的数据。

    数据写入过程,需要先得到HRegion才能继续操作,HRegion会把数据存储在若干个叫做HFile格式的文件中,这些文件使用HDFS分布式文件系统存储,在这个更集群内分布并高可用。当一个HRegion中数据量太多时,HRegion(连同HFile)会分裂成两个HRegion,并根据急群众服务器负载进行迁移,如果急群众有新加入的服务器,也就是说有了新的HRegionServer,由于其负载较低,也会把HRegion迁移过去并记录到HMaster,从而实现HBase的线性伸缩。