HBase之功能细节

2014-11-24 18:47:09 · 作者: · 浏览: 0

在Google的BigTable体系中,tablet的存储地址通过3层目录结构来定位的,如图所示:


注:tablet等同与HBase中的Region




图释说明:


(1)METADATATable


METADATATable是系统预定义的Table,当用户自定义表格被拆分成多个tablet之后,METADATA Table用来存储这些tablet的地址,在目录层级中处于第3层


(2)Root tablet


METADATA表格在分布式存储过程中也会被拆分成多个tablet,其中第一个tablet比较特殊,用来存储其他tablet的地址,称之为Roottablet,在目录层级中处于第2层


(3)Chunbby file


用来存储Roottablet的地址,在目录结构中处于顶层


这样,客户端可通过Chubby file遍历到任何tablet的地址


在HBase中:


Region的概念等同于tablet


.META.表格等同于METADATATable


而-ROOT-表格等同于Chunbby file


这样,客户端可通过-ROOT- Table遍历到任何Region的地址,并把这些地址在本地进行缓存,以加快下次查询效率


在HBase中,MasterServer负责将Region分配给RegionServer


首先,看一下BigTable中tablet如何分配:


当master机器启动的时候,它会处理如下事情:


(1)首先在Chunbby中获取masterlock,在分布式部署中,系统中只能有一个master处于运行状态,当其获得master锁之后,其他的master机器将会进入等待状态


(2)master会扫描Chunbby目录,以获取处于运行状态的table server(RegionServer)


(3)master会和每一台tabletserver进行通信,来记录哪些tablet已经成功分配


(4)master会扫描METADATA表格,如果发现有tablet不在已分配记录中,则将其分配到合适的tablet server


在HBase中,是通过如下API来完成Region的分配过程:


(1)Master在启动的时候,会去调用AssignmentManager类


(2)AssignmentManager通过查找.META.表格来获取Region信息


(3)如果Region尚未分配,则调用LoadBalancerFactory将其分配,默认的分配器(DefaultLoadBalancer)会将该Region分配给一个随机的RegionServer


(4)更新.META.表格信息


在HDFS中,HBase的数据存储呈如下目录结构:




|__


|__


|__


|__


在物理存储上SSTable由多个Block块组成,SSTable记录了每个Block快的索引位置,并且在被访问的时候将这些块索引加载到内存,以便系统快速定位Block块所在磁盘位置。