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、可伸缩性