zoukankan      html  css  js  c++  java
  • 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的元数据信息,负载很低。

            

     
  • 相关阅读:
    Day12 文件操作
    Day11 集合、集合操作
    Day10 【小程序】商城管理(购物车小程序的增强版)
    Day8 字符串操作
    Day9 字典操作
    文件操作
    【python练习】购物车程序
    2296 寻找道路
    2661 信息传递(tarjan&拓扑)
    【模板】LCA(tarjan)
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/7503747.html
Copyright © 2011-2022 走看看