HBase理论学习与分析

Hbase简介

  • HBase利用Hadoop的HDFS作为其文件存储系统,提供高可靠性、高性能、列存储,可伸缩、实时读写分布式的数据库系统,利用Zookeeper作为其协同服务,适合于非结构化数据存储的分布式数据库。

image

Hbase特点

  • 存储特点

    • 面向列存储
    • 存储量大:一个表可以有上亿行,上百万列(列多时,插入变慢)
    • 数据稀疏:对于空(null)的列并不占用存储空间,因此,表可以设计的非常稀疏
      • 补充:稀疏数据是指在数据集中绝大多数数值缺失或者为零的数据
    • 数据类型单一:HBase中的数据都是字符串,没有类型
  • 表的构造

    • 每张表里面有多个rowkey(行键),每个rowkey包含多个columnFamily(列族),每个coloumnFamily由一个或者多个cloumn(列)组成。
    • 数据查询结果:Row key + column family:column + timestamp + value
  • 传统关系型数据库和列式数据库的区别

image

HBase的原理

  • HBase的属性

    • Row Key
      • 表中每条记录的“主键”
      • 方便快速查找
    • Column Family
      • 拥有一个名称(string)
      • 包含一个或者多个相关列
    • Column
      • 属于某一个Column Family
      • 包含在某一列中
    • Timestamp
      • 每个rowKey有唯一一个
      • 类型为long
      • 默认值是系统时间戳
    • Value
      • 某一列属性的值(String)
  • HBase的存储

    • region是按照大小分割的,每个表开始只是一个region,随着数据的增多,region不断增大,当达到一个值的时候会等分成两个region。 image
    • region是分布式存储的最小单元,但并不是存储的最小单元。

      • region由一个或者多个Store组成,每个Store保存一个columns family;

      • 每个store由一个MemStore多个StoreFIle组成组成;

      • MemStore存储在内存中,StoreFile存储在hdfs上

        • 首先数据存储到MemStore上,当数据量达到一定的大小,再flush到storefile上,形成一个StoreFile。 image
  • HBase支持的操作

    • 所有操作都是基于row key的;

    • 支持CRUD(create、read、update、delete)和scan

      • 单行操作:put、get、scan
      • 多行操作:scan、multiPut
    • 没有内置join操作,需要使用mapreduce解决

HBase的架构

  • 架构图 image

  • 架构角色分析

    • Client:包含访问HBase的接口,并维护cache来加快对HBase的访问(即缓存遍历hbase:meta的区域数据)

    • Zookeeper

      • 保证任何时候,集群中只有一个master
      • 存储【所有region的寻址入口】(即hbase:meta的位置)
        • hbase:mate:维护着当前集群上所有区域的列表、状态和位置
      • 实时监控RegionServer的上线和下线信息,并实时通知给Master存储HBase的schema和table的元数据
    • Master

      • 为Region server 分配region
      • 负责Region server的负载均衡
      • 发现失效的Region server并重新分配其上的region
      • 管理用户对table的增删该查操作
    • Region Server

      • 维护region,处理这些region的IO请求
      • 负责切分在运行过程中变得过大的region
  • HBase的容错性

    • Master容错:Zookeeper重新选择一个新的Master

      • 无Master过程中:数据读取仍照常进行
      • 无Master过程中:region切分、负载均衡等无法进行
    • RegionServer容错:定时的向Zookeeper汇报心跳,如果一段时间内未出现心跳,Master将会将该RegionServer的Region 重新分配到其他RegionServer上。

      • 失效服务器上的**“预写”日志由主服务器进行分割并派送给其他RegionServer**。
    • Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例。

分区查看

  • 进入HBase Master主页http://hh:60030/rs-status可以查看
    • MapReduce如果以HBase为源输入,其Map数量由Region数量决定,如果源输入是HDFS,其Map数量是由HDFS文件分片决定。

image

参考