HBase

HBase

Hbase是一个基于HDFS的高可靠、高性能、面向列的分布式数据库,源于Google的BigTable论文。HDFS基于流式数据访问,低时间延迟的数据访问不适用于在HDFS上运行。所以,如果需要实时地随机访问超大规模数据集,使用HBase是更好的选择。

image

HBase是数据库,但并不像传统的Oracle、MySql等关系型数据库。这些关系型数据库也不是为了可扩展的分布式处理而设计的。得益于与Hadoop的整合,给HBase带来了更广阔的发展空间。

  • 关系型数据库
    表user

    id username age email
    1 zhangsan 20 zhangsan@163.com
    2 lisi 22 lisi@163.com
    3 wangwu 32 wangwu@163.com
    如果一张表的列过多,会影响查询效率,我们将这样的表称为宽表。那么应该如何优化呢?
    表User_basic
    id username
    1 zhangsan
    2 lisi
    3 wangwu
    表 User_info
    id age email
    1 zhangsan@163.com
    2 22 lisi@163.com
    3 32 wangwu@163.com
    使用垂直拆分的方法提高效率

id username age email
1 zhangsan 20 zhangsan@163.com
2 lisi 22 lisi@163.com
3 wangwu 32 wangwu@163.com
... ... ... ...
... ... ... ...
如果一张表的行过多,会影响查询效率,我们将这样的表称为高表,应该如何优化呢?
id username age email
1 zhangsan 20 zhangsan@163.com
2 lisi 22 lisi@163.com
3 wangwu 32 wangwu@163.com
4 ... ... ...

id username age email
5 xx xx yy@163.com
6 xx xx yy@163.com
7 xx xx yy@163.com
... ... ... ...
... ... ... ...

可以使用水平拆分的方式提高效率

动态列

id username age email phone wexin
1 zhangsan 20 zhangsan@163.com 133
2 lisi 22 lisi@163.com 188
3 wangwu 32 wangwu@163.com weixin123

可以处理成这样
id username age email dc
1 zhangsan 20 zhangsan@163.com
2 lisi 22 lisi@163.com
3 wangwu 32 wangwu@163.com

尽管我们有多种多样的方法可以将表进行优化,但是数据库的总容量还是限制了类似mysql这样的数据库在大数据中的应用

image

  • 特点
    1. 海量存储:适合存储PB级别的海量数据,在PB级别的数据下能在几十到几百毫秒内返回数据。
    2. 列示存储:即列族存储,HBase是根据列族(column family)来存储数据的。列祖下面可以有非常多的列,列祖在创建表的时候就必须指定。
    3. 极易扩展:通过横向添加RegionServer的机器,进行水平扩展,提升HBase的上层处理能力。
    4. 稀疏:HBase的列具备相当的灵活性。在列族中可以指定任意多的列,在列数据为空的情况下不占用存储空间。

体系架构

  • 体系结构

HBase同样是采用Master/Slaves的主从服务器结构,它由一个HMaster服务器和多个HRegionServer服务器构成,而所有服务器都是通过ZooKeeper协调并处理各服务器运行期间可能遇到的错误。HMaster负责管理所有的HRegionServer,各HRegionServer负责存储许多HRegion,每一个HRegion是对HBase逻辑表的分块。

image

  • 架构

    • HMaster:每台HRegionServer都会和HMaster服务器通信。HMaster的主要任务就是告诉每个HRegionServer它要维护哪些HRegion

      HBase中可以启动多个HMaster,通过ZooKeeper的Master选举机制来保证系统中总有一个Master在运行。

      功能:

      • 管理用户对表的增、删、改、查操作
      • 管理HRegionServer的负载均衡,调整HRegion分布
      • 在HRegion分裂后,负责新的HRegion的分配
      • 在HRegionServer停机后,负责失效HRegionServer上的HRegion迁移
    • HRegion:HBase表的分片,HBase会根据Rowkey值被切分为不同的Region存储在RegionServer中

    • HRegionServer:HRegionServer直接对接用户的读写请求

    • HLog:用于存储数据日志,实质是HDFS的Sequence File

    • Client:包含了访问HBase的接口,另外Client还维护了对应的cache来加速HBase的访问

    • ZooKeeper:master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护工作

    • Store:Hfile存储在Store上,一个Store对应表中的一个列族

    • MemStore:内存存储,位于内存中,用来保存当前的数据操作

  • 数据模型

    • 表(Table):一个稀疏表(不存储值为null的数据),表的索引是行关键字、列关键字和时间戳。
    • 行关键字(Row Key):行的主键、唯一标识一行数据,也称行键
    • 列族(Column Family):行中的列被分为“列族”,同一个列族的所有成员具有相同的列祖前缀。
    • 列关键字(Column Key):也称列键。格式为<family>:<qualifier>family为列族名,quealifier为列族修饰符
    • 时间戳(TimeStamp):插入单元格的时间,默认作为单元格的版本号
    • 单元格(Cell):一个单元格保存一个值。要定位一个单元格要使用“行键+列键+时间戳”3个要素
    • MemStore:内存存储,位于内存中,用来保存当前的数据操作。
posted @ 2021-04-27 22:20  Karl1  阅读(303)  评论(0编辑  收藏  举报