读书人

hbase 构造及工作过程

发布时间: 2012-08-25 10:06:20 作者: rapoo

hbase 结构及工作过程

最近关注

t9

"anchor:cnnsi.com"

"CNN"

t8

"anchor:my.look.ca"

"CNN.com"

t6

"<html>..."

"text/html"

t5

"<html>..."

t3

"<html>..."

上表中有一列,列的唯一标识为com.cnn.www,每一次逻辑修改都有一个timestamp关联对应,一共有四个列定义:<contents:>,<anchor:cnnsi.com>,<anchor:my.look.ca>,<mime:>。如果用传统的概念来将BigTable作解释,那么BigTable可以看作一个DB Schema,每一个Row就是一个表,Row key就是表名,这个表根据列的不同可以划分为多个版本,同时每个版本的操作都会有时间戳关联到操作的行。


再看一下HBASE的物理数据模型:

t6

"<html>..."

t5

"<html>..."

t3

"<html>..."

t9

"anchor:cnnsi.com"

"CNN"

t8

"anchor:my.look.ca"

"CNN.com"

t6

"text/html"

物理数据模型其实就是将逻辑模型中的一个Row分割成为根据Column family存储的物理模型。


对于BigTable的数据模型操作的时候,会锁定Row,并保证Row的原子操作。框架结构及流程hbase 构造及工作过程hbase 构造及工作过程

hbase 构造及工作过程下载 (10.03 KB)
2009-11-21 11:06

图2 提交更新以及刷新Cache流程

? ?? ? 由流程可以看出,提交更新操作将会写入到两部分实体中,HMemcache和Hlog中,HMemcache就是为了提高效率在内存中建立缓存,保证了部分最近操作过的数据能够快速的被读取和修改,Hlog是作为同步Hmemcache和Hstore的事务日志,在HRegion Server周期性的发起Flush Cache命令的时候,就会将Hmemcache中的数据持久化到Hstore中,同时会清空Hmemecache中的数据,这里采用的是比较简单的策略来做数据缓存和同步,复杂一些其实可以参照java的垃圾收集机制来做。

? ?? ? 在读取Region信息的时候,优先读取HMemcache中的内容,如果未取到再去读取Hstore中的数据。

几个细节:

1.
由于每一次Flash Cache,就会产生一个Hstore File,在Hstore中存储的文件会越来越多,对性能也会产生一定影响,因此达到设置文件数量阀值的时候就会Merge这些文件为一个大文件。

2.
Cache大小的设置以及flush的时间间隔设置需要考虑内存消耗以及对性能的影响。

3.
HRegion Server每次重新启动的时候会将Hlog中没有被Flush到Hstore中的数据再次载入到Hmemcache,因此Hmemcache过大对于启动的速度也有直接影响。

4.
Hstore File中存储数据采用B-tree的算法,因此也支持了前面提到对于Column同Family数据操作的快速定位获取。

5.
HRegion可以Merge也可以被Split,根据HRegion的大小决定。不过在做这些操作的时候HRegion都会被锁定不可使用。

6.
Hbase Master Server通过Meta-info Table来获取HRegion Server的信息以及Region的信息,Meta最顶部的一个Region是虚拟的一个叫做Root Region,通过Root Region可以找到下面各个实际的Region。

7.
客户端通过Hbase Master Server获得了Region所在的Region Server,然后就直接和Region Server进行交互,而对于Region Server相互之间不通信,只和Hbase Master Server交互,受到Master Server的监控和管理。

后话

? ?? ? 对HBase还没有怎么使用,仅仅只是看了wiki去了解了一下结构和作用,暂时还没有需要使用的场景,不过对于各种开源项目的设计有所了解,对自己的框架结构设计也会有很多帮助,因此分享一下。

读书人网 >其他数据库

热点推荐