HBase简介

@两篇很全面的文章,以及传智播客的课程。http://jiajun.iteye.com/blog/899632/和http://blog.csdn.net/woshiwanxin102213/article/details/17584043

一.简介

       hbase,全称Hadoop Base是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性(几台机器down掉不影响性能)、高性能(可以实现毫秒级的读写)、列存储、可伸缩、实时读写的分布式数据库系统。

       它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。

       与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,搭建起大规模结构化存储集群,来增加计算和存储能力。

       hbase可以利用HDFS作为其文件存储系统,利用MapReduce来分析处理HBase中的海量数据,利用Zookeeper来作为协调工具。

      下幅图表明了HBase在Hadoop生态圈的位置。

   

     HBase中表的特点:

  •  大:一个表可以有上亿行,上百万亿行
  • 无模式:每行都有一个可排序(字典顺序)的主键和任意多的列,列可以根据需要动态的增加,同一张表中的不同行可以有截然不同的列
  • 面向列:面向列(族)的存储和权限控制,列(族)独立检索
  • 稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏
  • 数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
  • 数据类型单一:HBase中的数据都是字符串,没有类型

 

二.HBase数据模型和基本概念

 

 

主键:Row key,是用于检索记录的主键,访问hbase table中的行,共有三种方式: 

    - 通过单个row key 访问
    - 通过row key的range
    - 全表扫描
    存储时,数据会按照row key的字典顺序排列存储,因此设计key时,应该充分利用排序存储的这个特性,将经常一起读取的行存储放在一起。
 
    补充说明:
    字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99
 
列族:Column Family,包含1个或多个相关列,例如上图中的info和data,列名通常以列族为前缀,定位到某一列时,应该列族:列名。例如info:name,data:sal等。
        访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能 帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因 为隐私的原因不能浏览所有数据)。
 
Cell:由{row key ,列族:列名,version}唯一确定的单元,cell中的数据是没有类型的,全部是字节码形式存储。
 
时间戳:通过row和columns确定的一个存储单元为cell,每个cell保存着同一份数据的多个版本,版本通过时间戳来索引。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。 
            为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。
 
三.物理存储
1.Table在行的方向上被分割为多个Hregion

 

2.region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,Hregion就会等分会两个新的Hregion。并且会被分配到两个不同的机器上。当table中的行不断增多,就会有越来越多的Hregion。

 

3.Hregion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的。

4. HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。

    事实上,HRegion由一个或者多个Store组成,每个store保存一个columns family。

    每个Strore又由一个memStore和0至多个StoreFile组成。如图:

    StoreFile以HFile格式保存在HDFS上。

   一个列族的数据是放在一个store上的。

  更多关于HFile的结构,见参考博客。

四.系统架构

很重要的一张图:

Client

        包含访问HBase的接口(例如操作数据库的java接口),并维护cache来加快对HBase的访问,比如region的位置信息。

Zookeeper(动物管理员)

       1.在实际中,为了集群的安全,启用了多个master。但是通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册。

       2.存贮所有Region的寻址入口,主要是存储Region和列族的映射表

       3.实时监控Region server的上线和下线信息,并实时通知Master,从而进行重新分配。因为region server上线会发送心跳给zookeeper,超过一段时间未发送心跳,就认为down机了

       4.存储HBase的schema和table元数据。包括有哪些table,每个table上有哪些column family

       zookeeper的引入是为了更高效的管理多个region server

Master

   1.为region server 分配region。当某个region的数据过多,会被切分为两部分,region的切分由master来完成。

   2.负责region server的负载均衡

   3.发现失效的region  server 并重新分配其上的region(数据可以从HDFS上恢复)

   4.HDFS的垃圾文件回收

   5.处理schema更新请求,主要是DDL操作,例如创建表,删除表...

Region Server

   1.维护region,处理对这些region的IO请求

   2.负责切分在运行过程中变得过大的region

        可以看到,client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低。

        

 

posted on 2017-09-11 10:28  SunnyCx  阅读(303)  评论(0编辑  收藏  举报

导航