Hbase原理简析,hbase简析


1、概述

   Hbase是一个分布式的、面向列的开源的kv数据库。

   在2006年发起,是BigTable的山寨产品,07年成为Hadoop的子项目。在10年成为Apache的顶级项目。

        众多社区的参与使得Hbase逐渐完善,在很多公司中使用。

    Hbase的稳定性一直是个问题,但是使用它的还是很多。主要是因为其实际的存储模型能够与实际的业务匹配程度高相关的。

2、Hbase特点

     ---  Key-Value类型的DB

          仅仅适合对单一key的增删改查,以及扫库操作(扫全库 或者 扫一部分范围)。

          数据按照key的字典序的顺序存储在管理实体中(存储方式并不复杂)。

     ----  列式存储

          区别传统数据库,建表时Schema必须要完善;而Hbase对Schema限制很少。

          因为Hbase来源于Bigtable,存储网页数据,由于网页数据的稀疏特性(稀疏键值存储),有特殊的需求,即可以自由添加字段。对半结构化数据非常有用

     ----  线性扩展

           有点相比于传统数据库,这是任何分布式数据库系统的特征;

           可以处理上P的数据

     ----  高可用

           设计运行在廉价的PC上,无单点问题

     ----  强一致性

           不同于最终一致性哈;强一致性要求低延时。

3、数据模型

行:同一个Key对应的所有数据,行数量不设上限

列族:

        --- 相似的列数据通常被划分为一个列族(如何划分呢?)

        --- 数量有限,建表时指定,不同动态增加

        --- 可以存储任意多得列

 列:列名在写入时决定,数量可以很多

cell及时间戳(版本)

         --- 每个cell可以有任意多个版本,指具体存储数据的单元;

         --- 在每个单元中可以有多个版本;建表时制定每个列族可以保留多个版本

表:(抽象数据集合,表之间没有关联)

         --- 类似于传统DBMS表,按照行row key值的字典序存储(从小到大),数据被组织到若干Region中,也就是一张表被切分成若干Region;

         Region:(Hbase是负载均衡和调度的最小单位,也是能提供分布式服务的原因所在)

             表切分后存储单元;Region内部的行是有序的。   

4、API

Put/Get:针对某个key的读、写操作;可以独立写入某个Column

Scan:顺序扫库,Hbase原生提供的API接口;单一的客户端就可以Scan

Mapreduce:并发扫库,通过MR任务执行;

Bulk Load:一种快速导入大批量数据的入库方法;先根据Hbase存储的数据格式生成Hbase可以生成的格式,然后进行批处理方式入库

Replication:使用Journal(Hlog)实现数据备份;保持数据的鲁棒性,Hbase的不间断性提高;

5、系统组成

三大组件:MasterServer/RegionServer/Zookeeper

                                                                         

Zookeeper集群:分布式锁服务,提供分布式环境下多机协调功能不存在单点问题;

               提供通知服务(那些服务还活着?),定位Root Region等作用;

MasterServer:负载均衡、错误恢复、Meta数据的事务控制

RegionServer:slave节点,读写数据的操作;完成master分发的任务,比如split等

Hbase和Hadoop一起部署,NameNode和RegionServer一起部署,好处是可以共用HDFS,当本地管理性能好时,提高读写性能;

Master是分开部署的;

6、数据组织以及存储方式

数据组织:

三级表结构:Root、Meta、UserTable

RootRegion表:由zookeeper确定,最多只有一个Region,记录Meta表每个Region的位置

Meta表:可能包含多个Region,Meta表记录各个表每个Region所在的服务器的位置

实际操作中,客户端会缓存Meta表的数据,知道有错误时才更新

存储方式:

系数矩阵-列式存储,在Hbase表分成多列,把每列当成一个文件来存储;很多列的数据属于同一行,但不存在一起。

基于HDFS:(HDFS只支持追加写,不支持随机写,若是在此不可更改的FS上实现可随机更新的DB是很复杂的)

基于廉价的硬件

支持较高的写入数据(写性能高于读性能)

LSM树:对新入数据的管理;传统的数据库采取的B+数;对处理频繁写入时,通过小树不断merge成大树的过程

数据单元:

稀疏结构的数据实质上是按照:row key + column + quallifier + version

顺序密集存储的原子数据

每行数据由若干条原子数据组成

底层文件结构:

HFILE:基于Block存储数据,Block索引常驻内存,默认BlockSize=64K,在表建立的时候可以指定BlockSize大小;

7、主要操作

Flush:

     内存容量有限,因此需要定期将内存数据Flush到磁盘

     每次Flush,每个Region的每个Column Family会产生一个HFILE

     读取操作是,RegionServer会将多个HFILE的数据归并到一起,并按照版本选择数据

Compaction:

     Flush产生的HFILE会越来越多,需要归并以控制文件数量;

     将旧数据进行清理;

Split:

     Region数据会持续增长

     需要进行Split,以实现负载均衡

     split完成后,必须通报Master才能真正生效

8、错误恢复(执行机制)

  Master通过Zookeeper感知各个RegionServer的状况   当RegionServer挂掉后,通过HLog(HDFS)实现错误恢复;每个RegionServer维护一个HLog   Master将相关数据剥离到不同的Region存储 目录下,新的RegionServer进行数据重建。




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关内容

    暂无相关文章