Hbase简介

HBase 是一个高可靠性、高性能、面向列簇、可伸缩的海量Nosql数据库,支持对数据的实时增删查改。同Hadoop一样,HBase同样构建在廉价PC Server集群上,仅需使用普通的硬件配置,就能够处理成千上万的行和列所组成的海量数据。

HBase 的原型是 Google 的 BigTable 论文,受到了该论文思想的启发,目前作为 Apache
的顶级项目来开发维护,用于支持结构化的数据存储。

特点:

  • 针对海量数据:Hbase 适合存储 PB 级别的海量数据,单表可以轻松达到数十亿行。
  • 面向列簇:Hbase 是根据列簇来存储数据。
  • 易扩展:HBase存储依赖HDFS,处理能力可以通过添加机器来扩展RegionServer的处理能力。
  • 支持高并发:HBase采用分区以及负载均衡的技术,可以实现很好的读写性能。
  • 不支持SQL:同几乎所有的Nosql一样,原生不支持SQL语句。
数据模型

HBase以表的形式存储数据,表由行和列组成。列划分为若干个列族,如下图所示:

hbase数据存储结构图 hbase存储架构_hbase数据存储结构图


Table(表):一个表可以有很多行。

Row(行):hbase中一行由一个Rowkey和很多列组成,所有的行的Rowkey是二进制有序的。

Column(列):列类似关系数据库表中的属性,列是可以随意定义的,一个行中的列不限名字、不限数量。

Column Family(列簇):一个列簇包含多个列,考虑到性能的原因,一个列簇里的所有数据会被统一存储。

Cell(单元格):一个列中可以存储多个版本的数据,而每个版本就称为一个单元格。

Timestamp(时间戳):一个列中可以有多个cell,那么怎么区别这些cell呢,这里就引入了时间戳,其实也可以理解为版本。

架构

hbase数据存储结构图 hbase存储架构_海量数据_02


HMaster

  • 负责维护集群的元数据信息,如表的创建,删除,属性修改等。
  • region的管理,如region的split,合并已经region的错误转移。
  • 维护整个集群的负载均衡。

HregionServer

  • HregionServer直接对接用户的读写请求,是真正的“干活”的节点。

Zookeeper

  • 存储集群的重要元数据。
  • HMaster高可用需要借助Zookeeper。
  • 监控RegionServer的状态,当RegionServer下线时通知给Master。

HRegion

  • Region是表的一部分数据。一个Region相当于关系数据库中表的一个分区。Region是对表的横向切割。

Store

  • 除了横向切割,Hbase也对表进行了纵向切割。每个列簇的数据会被同意存储,一个列簇就是一个Store。

MemStore
写入到每个Store的数据并不是会马上写入HDFS,首先数据会被存储在MemStore,每个Store都有一个MemStore。只有当MemStore达到阈值大小或者人工强制flush时数据才会落地到HDFS上。

StoreFile
每个MemStore落地到HDFS时,每次都会生成一个StoreFile。StoreFile就是一个HFile文件。HFile是HBase特有的文件存储格式。

HLog

  • Hlog就是WAL,WAL(write ahead log)意为预写日志。它是为了解决数据可靠性。数据到达HRegion的时候是先写入WAL,然后再写入Memstore。假如RegionServer此时宕掉了,由于WAL的数据是存储在HDFS 上的,所以数据并不会丢失。