HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器(HRegion Service)群和HBase Master服务器(HBase Master Server)构成。Hbase Master服务器负责管理所有的HRegion服务器,而Hbase中所有的服务器是通过Zookeeper来进行协调,并处理HBase服务器运行期间可能遇到的错误的。
1、HRegion
当表的大小超过设置的值时,HBase会自动地将表划分为不同的区域,每个区域包含所有行的子集。从物理上讲,一张表被拆分成了多块,每一块儿就是一个HRegion.一个HRegion会保存一表里面某段连续的数据,从开始主键到结束主键,一张完整的表格是保存在多个HRegion上面。
2、HRegion服务器
所有的数据一般都是保存在HDFS中,用户通过一系列HRegion服务器获取这些数据,一台机器上一般只运行一个HRegion服务器,且每一个区段的HRegion也只会被一个HRegion维护。
当用户需要更新数据的时候,他会被分配到对应的HRegion服务器上提交修改,这些修改先是被写到Hmemcache缓存和服务器的Hlog文件里面(Hmemcache是内存中的缓存,保存最新更新的数据数据:HLOG是磁盘上面的记录文件,它记录着所有的更新操作),在操作写入Hlog之后,commit()调用才会将其返回给客户端。
读取数据时,HRegion服务器会先访问Hmemcache缓存,如果缓存中没有该数据,才会回到Hstores磁盘上面寻找,每个列族都会有一个Hstore集合,每个Hstore集合包含很多具体的HstoreFile文件,这些文件都是B树结构,方便快速读取。
启动时,每台HRegion服务器会检查自己的Hlog文件,看看最近一次执行flushcache之后有没有新的更新写入操作。如果没有,表示数据都已经更新到文件中了,如果有更新,服务器会把这些更新写高速缓存,然后调用flushcache写入到文件中。最后服务器会删除旧的Hlog文件,并开始让用户访问数据。
3、HBase Master服务器
每台HRegion服务器都会和HMaster服务器通信,HMaster的主要任务就是告诉每台HRegion服务器它要维护哪些HRegion.当一台新的HRegion服务器登录到HMaster服务器时,HMaster会告诉它先等待分配数据。而当一台HRegion死机时,HMaster会把它负责的HRegion标记为未分配,然后再把它分配到其他HRegion服务器中。
4、ROOT表和META表
因为Hbase有合并和分割操作,如果正好在执行这些操作的过程中出现死机,那么就可能存在相同的 表名和开始主键,每个HRegion都有一个 regionId 来标识它的唯一性。所以一个HRegion的表达符最后是:表名+开始主键+唯一ID(tablename + startkey + regionId)。用这个识别符来区分不同的HRegion,这些数据就是元数据(META),而元数据本身也是被保存在HRegion里面的,所以我们称这个表为源数据表(META Table),里面保存的就是HRegion标识符和实际HRegion服务器的映射关系。
元数据表是会不断增长的,也可能被分为几个HRegion,所以采用了一个根数据表(ROOT table),它保存了所有元数据表的位置,根数据表是不会被拆分的,永远存在于一个HRegion。
HBase数据模型
(注意的是,每一条数据对应的时间戳都是用数字来表示,编号越大表示数据越旧,反之则表示数据越新)
参考《Hadoop 实战》