HBase的各大组件

HBase 在hadoop生态圈中

HBase是什么,可以被用在哪里,解决什么样的问题?

Hbase是一种类似数据库的存储层,HBase适用于结构化的存储,并且是一个列式的分布式数据库,由当年的BigTable的论文而生。

数据在HBase中的排布逻辑上
Row-key value(CF, Qualifiter, Version)
00001 info{‘姓’: ‘张’,’名’:’三’}
pwd{‘密码’: ‘111’}
00002 Info{‘姓’: ‘李’,’名’:’四’}
pwd{‘密码’: ‘222’}

数据模型

数据在HBase上的排布
Row-Key CF:Colum-Key 时间戳 Cell Value
00001 info:fn 123456789
00001 info:fn 123456789
00002 info:fn 123456789
00002 info:fn 123456789

在 Hbase 中,Row-key 加上 CF 加上 Qulifier 再加上一个时间戳才可以定位到一个单元格数据(Hbase 中每个单元格默认有 3 个时间戳的版本数据)。

Hbase的表特征

HBase相关模块

image

Master

HMaster运行在namenode节点上

Hbase Master 协调多个Region Server,并监测他们之间的状态。 HMaster分配还负责分配Region 给 Region Server。

HMaster职责 *

Master宕机,不影响RegionServer正在持行的工作。所以不存在单点故障(SPOF)。类似傀儡皇帝。

HMaster是所有metadata更改的接口。

Region Server

HRegionServer运行在datanode节点上

一个Region Server包含多个Region。Region Server的作用就只是管理表格,以及实现读写操作。

Client 连接 Region Server, 并通信获取HBase中的数据

client

HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信。

Zookeeper

负责Region 和 Region Server的注册。 实现HMaster的HA

Hbase强依赖ZK

Region

Region 是真实存放数据的地方。如果表非常大,并由多个CF组成,那么表的数据将放在多年Region之间, 每个Region中会关联多个存储单元。

Cloumn Family

image

Hbase的工作机制

  1. client 访问HBase集群时,首先需要和zookeeper通信,找到对应的Region Server。
  2. Region是HBase的并行单元,数据都存在Region中。
  3. Region存储达到上限时(Threshold),Region会进行分裂,数据也会分裂到多个Region中。
  4. 每个Region包含多个store对象。
  5. 每个store中包含一个MemStore,和1个或多个HFile。
  6. MemStore 是数据在内存中的实体并且一般有序。当数据向Region写入时,会先写入到MemStore中。
  7. 当 MemStore 中的数据需要向hdfs倾倒(Dump)时(例如 MemStore 中的数据达到阈值),Store 便会创建 StoreFile,而 StoreFile 就是对 HFile 一层封装。
  8. MemStore 中的数据会最终写入到 HFile 中,也就是磁盘 IO。由于 HBase 底层依靠 HDFS,因此 HFile 都存储在 HDFS 之中。

写流程

  1. client 向 HRegionServer发送写请求
  2. HRegionServer将数据写到hlog(write ahead log)。为了数据的持久化和恢复。
  3. HRegionServer将数据写到内存
  4. 反馈client写成功

数据flush过程

  1. 当memstore数据达到阈值(默认是128M),将数据刷 到硬盘,将数据删除,同时删除HLog中的历史数据
  2. 并将数据存储到hdfs
  3. 在hlog中标记点

store数据合并过程

image

  1. 当数据块达到四个,hmster将数据块加载到本地,进行合并
  2. 当合并的数据超过256M,进行拆分,将拆分的Region分配给不同的HRegionServer管理
  3. 当HServer宕机后, 将HRegionServer的hlon拆分 ,然后分配不同的HRegionServer加载,修改.META

HBase如何保证数据可靠性

HBase 中的 HLog 机制是 WAL 的一种实现,而 WAL(一般翻译为预写日志)是事务机制中常见的一致性的实现方式。

每个 Region Server 中都会有一个 HLog 的实例,Region Server 会将更新操作(如 Put,Delete)先记录到 WAL(也就是 HLog)中,然后将其写入到 Store 的 MemStore,最终 MemStore 会将数据写入到持久化的 HFile 中(MemStore 到达配置的内存阀值)。