Monthly Archives: January 2013

HBase的物理模型

上一篇讲了HBase的逻辑模型,这一篇准备从大体上讲一下HBase的物理模型,首先简单来说,HBase由一个Master server和多个Region server组成,在所有的region server中有一个server被称为Root Region Server,它的地址一般保存在一个zookeeper集群上,Master将通过读取zookeeper来获得这个地址,Root Server上保存着region信息都是关于Meta table的,逻辑上像一个内存的Map,从另一个角度上讲他也是一个普通的HBase表,

Map<.meta.,table name,created timestamp, region server address>

当从上一步得到region的信息后,可以进一步的访问得到的region sever,这些server也被称为Meta Region Server,这些server上保存的类似下面的结构,

Map<table name,start key,created timestamp, region server address>

到了这一步,我们才真正找到了给定一个table和一个key,这个数据究竟在哪个region server上。

HBase的逻辑模型

Map<table,SortedMap<key,Map<ColumnFamily,SortedMap<column,SortedList>>>>

HBase中每一个table可以看成一个有序的Key-Vlaue Map,第一个SortedMap描述这样的结构,每一个key值对应着一个Map,Map里的每一个key代表着一个Column Family,value是一个SortedMap按照Column名字的binary compare排序,Value就是一个SortedList按照Timestamp排序,最后更新的排在最前面。HBase Definitive Guid p20把第二个Map抽象成List,似乎暗示寻找Column Family需要线性遍历,其实HBase是直接找到对应Column Family文件夹,这也是为什么Column Family的名字一定要用printable的原因,它受制于文件系统,所以用Map更合适。