HBase简述

HBase是一款Apache下的基于HDFS的分布式NoSQL数据库,主要用于解决HDFS分布式存储不能实现随机读写的瓶颈,适用于大数据量存储、随机读写、字段分布稀疏的场景。

HBase架构

HBase是一款分布式存储数据库,分为主从节点,具体架构如下图所示:

  1. HBase 架构图
  2. hbase数据架构 hbase架构图_HDFS

  3. HBase 主节点
    HBase 主节点上启动HMaster服务,用于管理从节点,主要包括以下功能:
    1)管理元数据,主要是分配和下线Region;
    2)管理RegionServer 服务,当RegionServer节点宕机后重新进行规划;
    3)与Zookeeper通信,将自己的位置发布给Zookeeper
  4. HBase 从节点
    HBase从节点上启动HRegionServer服务,主要用于数据存储,其内部管理Region、Store、MemoStore、StoreFile、HFile等组件。主要包括以下功能:
  1. 负责HBase 数据存储;
  2. 刷新StoreFile文件到HDFS,并将小的HFile文件合并压缩为大HFile文件,大HFile文件超过阀值后进行分裂,生成新的Region和HFile文件;
    3)与主节点通信,将自身状态发送给主节点

HBase读流程

HBase 读数据的流程如下图所示:

hbase数据架构 hbase架构图_客户端_02

  1. 客户端发送读取数据命令,连接zookeeper集群,获取hbase:meta 表所在的RegionServer地址;
  2. 连接meta表所在的RegionServer,根据meta表信息获取目标表的Region信息和所在RegionServer:
    1)当使用get命令,查询单条数据时,返回一个Region和RegionServe信息;
    2)当使用Scan扫描命令时,进行全表数据扫描,可能返回多个Region和RegionServer信息;
    3.连接目标表Region所在的RegionServer,返回查询数据,其中数据查询的顺序为:MemoStore->HDFS Block Cache-> Store File->HFile。查询后,会将数据缓存在Block Cache,以提高查询效率,但对Scan没有意义,因为其是全表扫描。

HBase写流程

HBase存储数据分为客户端和服务端两部分,服务端是异步完成数据存储。
客户端流程如下:

  1. 客户端发送存储数据命令,连接zookeeper集群,获取hbase:meta表所在的RegionServer地址;
  2. 连接meta表所在的RegionServer,根据meta表信息获取目标表的Region信息和所在的RegionServer;
  3. 连接目标表Region所在的RegionServer,向其中的Region 中的HLog写入数据,并根据不同的列族将数据写入到不同的Store 下的 MemoStore内存中,写入完成之后,客户端流程完成。
    服务端流程如下:
  4. 当客户端不断将数据写入MemoStore后,超过阀值(MemoStore内存128M/1h)后,触发flush刷新机制,最终将MemoStore内存数据刷入到HDFS 上,形成Store File 文件;
  5. 当Region中Store File文件越来越多,超过阈值(3个及以上)时,触发compact 合并机制,形成大的HFile文件;
  6. 随着Store File 文件合并,HFile文件越来越大,超过阈值(10G)时,触发split 分裂机制,将大的HFile文件一分为二,同时创建新的Region,管理新的HFile 文件,并将旧的Region和HFile文件下线。