HBase体系结构

HBase  HBase是Apache Hadoop的数据库,基于HDFS文件系统

random,realtime read/write access to Big Data

开源、分布式、可扩展、面向列

larger tables--billions of rows X millions of columns

不支持表链接操作

不支持事务处理


HBase存储的数据从逻辑上来看就像一张很大的表,其数据列可以根据需要动态增加。

每个单元(cell,由行和列所确定的位置)中的数据根据时间戳可以有不同版本。

在HBase之上还可以使用MapReduce计算模型来处理大规模数据。


HBase实际是map

(row key, column family: qulifier, timestamp) --> content

查询时,指定:表名-->行键-->列族:列名-->版本号


将big table分不同的region存储,RegionSever和DataNode在一台主机上。

HMaster为RegionServer的主节点,不存储表的数据,负责:

1、RegionServer状态管理;

2、RegionServer负载均衡。


寻址机制:HMaster不参与

两张特殊的表:

-ROOT-:记录.META的Region信息,只有一个。位置去zookeeper查(/hbase/ROOT;//对应值为一台主机)

.META.:记录用户表的Region信息,多个


查询时,会将路径缓存。


海量数据的秒级简单查询

每个列族一个文件

按行键拆分成一个个的region

region存储在region server中

可以启动多个HMaster,通过ZooKeeper的Master Election机制保证总有一个Master运行

ZooKeeper存储Region的寻址入口,监控Region Server的状态,存储Hbase的schema


表名+开始/结束行键来标记每一个Region

每一个Region保存一个表里面某段连续的数据,从开始主键到结束主键



数据的存储:

HRegionServer包括两大部分:HLOG部分和HRegion部分。

HLOG用于存储日志,采用先写日志的方式(Write-ahead log)。

HRegion部分包含很多Region,存储实际数据。

每一个Region由很多Store组成,每个Store存储的是一个列族(ColumnFamily)的数据。

每一个Store包含一块驻留内存的MemStore和多个StoreFile。

数据首先更新到MemStore中,达到域值之后再更新到对应的StoreFile中。

StoreFile是HBase的最小单元,负责实际数据的存储。

HBase把同一列族里面的数据存储在同一个目录下


HBase不涉及数据的直接删除和更新操作,所有数据通过追加方式进行更新。

数据的删除和更新在HBase合并(compact)的时候进行。

当Store中StoreFile的数量超过设定域值时将触发合并操作,将多个StoreFile文件合并成一个StoreFIle。



数据的更新:

更新数据时,数据被分配到对应的HRegionServer,首先进行HLOG日志登记。

在操作写入HLOG之后,commit()调用才会将其返回给客户端。

HLOG用于故障恢复,若一台HRegionServer发生故障,其所维护的Regions将被重新分配到新的机器上。

这是HLOG会安装Region进行划分,新的机器在加载Region时通过HLOG对数据进行恢复。



Region的分裂:

当Region超过域值时,HRegionServer调用HRegion.closeAndSplit()将其拆分成两个,

并且报告给HMaster,让其决定由哪台HRegionServer来存放新的Region。

这个拆分过程十分迅速,两个新的HRegionServer最初只保留原来HRegionFile文件的引用。

这是旧的HRegionServer处于停止服务的状态,当新的HRegion拆分完成并且把引用删除后,旧的HRegion才会删除



Region的合并:

两个Region可以通过调用HRegionServer.closeAndMerger()合并成一个新的Region。

当前版本下,执行此操作需要两台HRegionServer停机。


HMaster:

1、管理用户对Table的增删改查操作;

2、管理HRegionServer的负载均衡;

3、在HRegion分裂后,负责新HRegion的分配;

4、在HRegionServer停机后,负责HRegions的迁移。


ROOT表和META表:

一个HRegion的键:表名+开始主键+唯一ID(tablename+startkey+regionId),通过这个标识区分不同的Region。

此为元数据,META。

元数据本身也被存放在HRegion里,称包含元数据的表为META Table,里面存储的是Region标识符和服务器的映射

META Table的Regions存储在ROOT Table中。

元数据表和根数据表的每一行都包含一个列族(info列族):

info:regioninfo //HRegion标识符

info:server //服务器地址

info:startcode //在HRegion服务器启动时传给主服务器,让主服务器确定这个HRegion服务器的信息没有更改


HBase启动时,HMaster先扫描根数据表,因为这个表只有一个Region,所以这个Region的名字是被写死的。

有时需要把根数据表分配到一个HRegionServer中。

当根数据表被分配好后,HMaster扫描根数据表,获得元数据表的名字和位置,然后把元数据表分配到不同的HRegionServer中。

最后扫描元数据表,获得所有Region区域的信息,把它们分配给不同的HRegion服务器。


客户端缓存已知的ROOT表和META表,从而提高访问效率。


ZooKeeper的作用:

1、存储ROOT表和META表的位置;

2、监控集群状态;

3、保证在同一时刻只有一个HMaster。


HBase特点:

1、数据类型只有简单的字符串类型

2、数据操作只有很简单的插入、查询、删除、清空等操作,没有复杂的表与表之间的关系

3、基于列存储,每个列族由几个文件保存,不同列族文件是分离的

4、数据维护保存多个版本

5、可伸缩性





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值