1.Region定位在Google的BigTable体系中,tablet的存储地址通过3层目录结构来定位的,如图所示:注:tablet等同与HBase中的Region
1.Region定位
在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的地址,并把这些地址在本地进行缓存,以加快下次查询效率
2.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.表格信息
3.数据存储在HDFS中,HBase的数据存储呈如下目录结构:
|__