HBase功能组件主要有三个:库函数、master、region

主服务器Master负责管理和维护HBase表的分区信息,维护Region服务器列表,分配Region,负载均衡

Region服务器负责存储和维护分配给自己的Region,处理来自客户端的读写请求

客户端并不直接从master主服务器上读取数据

客户端并不依赖master,而是通过zookeeper;来获得region位置信息,大多数客户端甚至从来不和master通信,这种设计方式使得master负载很小。

表和region的关系

一个HBase表被划分多个region

开始只有一个region 后来不断的分裂

region拆分操作非常快接近瞬间 ,因为拆分之后的region读取的仍然是原存储文件,直到合并过程把存储文件异步地写到独立的文件之后,才会读取新文件



•每个Region默认大小是100MB到200MB(2006年以前的硬件配置)


•每个Region的最佳大小取决于单台服务器的有效处理能力


•目前每个Region最佳大小建议1GB-2GB(2013年以后的硬件配置)


•同一个Region不会被分拆到多个Region服务器


•每个Region服务器存储10-1000个Region


不同的Region可以分布在不同的Region服务器上



  Region的定位

 


•元数据表,又名.META.表,存储了Region和Region服务器的映射关系


•当HBase表很大时, .META.表也会被分裂成多个Region


•根数据表,又名-ROOT-表,记录所有元数据的具体位置


•-ROOT-表只有唯一一个Region,名字是在程序中被写死的


•Zookeeper文件记录了-ROOT-表的位置







hbase三层结构及其作用 hbase的三层结构_客户端




为了加快访问速度,.META.表的全部Region都会被保存在内存中



•假设.META.表的每行(一个映射条目)在内存中大约占用1KB,并且每个Region限制为128MB,那么,上面的三层结构可以保存的用户数据表的Region数目的计算方法是:



•(-ROOT-表能够寻址的.META.表的Region个数)×(每个.META.表的Region可以寻址的用户数据表的Region个数)



•一个-ROOT-表最多只能有一个Region,也就是最多只能有128MB,按照每行(一个映射条目)占用1KB内存计算,128MB空间可以容纳128MB/1KB=217行,也就是说,一个-ROOT-表可以寻址217个.META.表的Region。



•同理,每个.META.表的Region可以寻址的用户数据表的Region个数是128MB/1KB=217。



•最终,三层结构可以保存的Region数目是(128MB/1KB)×(128MB/1KB) = 234个Region





客户端访问数据时的“三级寻址”





• 为了加速寻址,客户端会缓存位置信息,同时,需要解决缓存失效问题





• 寻址过程客户端只需要询问 Zookeeper 服务器,不需要连接 Master 服务器