HBase的体系结构

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.表,存储了RegionRegion服务器的映射关系
HBase表很大时, .META.表也会被分裂成多个Region
根数据表,又名-ROOT-表,记录所有元数据的具体位置
-ROOT-表只有唯一一个Region,名字是在程序中被写死的
Zookeeper文件记录了-ROOT-表的位置

HBase的体系结构_第1张图片

为了加快访问速度,.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) = 234Region


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


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

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


你可能感兴趣的:(HBase的体系结构)