Hbase简介、架构与读写流程解读

本文内容如下:

HBase 是一个分布式,可扩展,面向列的适合存储海量数据的数据库,其最主要的功能是解决海量数据下的实时随机读写的问题。

通常 HBase 依赖 HDFS 做为底层分布式文件系统,本文以此做前提并展开,详细介绍 HBase 的架构。

  • Hbase数据模型
  • HBase 关键进程
  • HBase 架构
  • 读、写流程解读

Hbase数据模型

在这里插入图片描述

  • RowKey:用于唯一标识Hbase中的一条数据(记录),不可重复,按照字典顺序排序,只能存储64k的字节数据,因此一般要求设计RowKey要简短。
  • TimeStamp:HBase自动赋值时间戳(也可自己实现),作为版本号,64位整型。Hbase每个cell存储单元(k:v)对同一份数据有多个版本,通过实践戳来区分版本之间的差异,按时间倒叙排序。
  • CF(ColumnFamily):列族,可包含多列。权限控制,存储以及调优都是在列族层面进行的。HBase把同一列族里面的数据存储在同一目录下,由几个文件保存(StoreFile)。
  • Column:列,对应key,一列可以在多个版本中维护不同数据。
  • Value:数据。
  • Cell:是未解析的字节数组。由{rowkey, column(=+),version}唯一确定的单元。由rowkey,列族,列,版本唯一确定一个单元。中的数据,没有类型,全部是字节码形式存储。

HBase 关键进程

HBase是一个 Master/Slave 架构的分布式数据库,内部主要有 Master, RegionServer 两个核心服务,依赖 HDFS 做底层存储,依赖 zookeeper 做一致性等协调工作。

  • Master 是一个轻量级进程,负责所有 DDL 操作,负载均衡, region 信息管理,并在宕机恢复中起主导作用。
  • RegionServer 管理 HRegion,与客户端点对点通信,负责实时数据的读写。
  • zookeeper 做 HMaster 选举,关键信息如 meta-region 地址,replication 进度,Regionserver 地址与端口等存储。

HBase 架构

架构图如下:
Hbase架构图

组件解读

Client

  1. 包含访问HBase的接口并维护catch来加快对Hbase访问。

Zookeeper:

  1. 保证任何时候,集群中只有一个master;
  2. 保存所有 Region 的寻址入口;
  3. 实时监控Region Server的上下线信息,并通知Master;
  4. 存储HBase的 schema 和 table 元数据。

Master:

  1. 为 RegionServer 分配 Region ;
  2. 负责 RegionServer 的负载均衡;
  3. 发现失效的 RegionServer 并重新分配到其他 RegionServer 工作。(KeepAlive)
  4. 管理用户对table的增删改查(只负责请求传递)

RegionServer:

  1. 维护多个 region,处理对这些 region 的 IO请求,真正的增删改查操作。
  2. 水平切分运行中变得过大的 region (裂变,尽量等分)。

Region:

  1. 每个 region 保存表中某段连续的数据(多行),每个表一开始只有一个 region,随着数据量不断增加,region增大;
  2. 当 达到一个阈值时,region就会被 regionServer 水平切分成两个新的 region;
  3. 当 region 很多时,将会保存到其他 regionServer 上。

Store:

  1. 一个 region 由多个 store 组成,每一个 store 对应一个CF(列族), store 包含 memstore 和 storeFile;

MemStore:

  1. 内存缓存区,数据的写操作会先写到 memstore 中,当 memstore 中的数增长到一个阈值后,regionServer 会
    启动 flashcatch 进程写入到 storeFile 中,每次写入形成一个单独的 storeFile 。

StoreFile:

  1. 当storeFile数量增长到一定阈值后,系统会进行合并(minor major compaction),合并过程会进行版本的合并和删除工作,,形成更大的 storeFile。(优化一般主要针对 major 合并)
    (注意:过时的版本是在合并时候才删除的,而不是插入数据时)
  2. 当一个 region 所有的 storeFile 大小和数量增长到超过一定阈值后,会把当前 region 分割为两个,并且由 master 分配
    到相应的 regionServer 服务器,实现负载均衡;
  3. 客户端检索数据,先在menStore找,找不到再找storeFile。

Hfile:

  1. 和StoreFile是同一个东西,只不过是站在HDFS角度称这个文件为Hfile,在Hbase角度就叫StoreFile。

HLog:

  1. 是一个普通的 Hadoop SequenceFile,记录数据以及数据的操作,目的是用来做数据容灾。
  2. HLog SequenceFile 的 Value 是 HBase 的 KeyValue 对象,对应HFile中的KeyValue。

写流程解读

HBase 数据存储基于 LSM 架构,数据先顺序写入 HLog,默认情况下 RegionServer 只有一个 Hlog 实例,之后再写入 HRegion 的 MemStore 之中。

HRegion 是一张 HBase 表的一块数据连续的区域,数据按照 rowkey 字典序排列,RegionServer 管理这些 HRegion 。

当MemStore达到阈值时触发flush操作,刷写为一个 HFile 文件,众多 HFile 文件会周期性进行 minor compaction 和 major compaction 合并成大文件。

所有 HFile 与日志文件都存储在HDFS之上。


读流程解读

写流程在上面讲述Hbase架构时已有阐述,下面详细介绍读流程。

客户端读取数据有两种方式, Get 与 Scan。

Get 是一种随机点查的方式,根据 rowkey 返回一行数据,也可以在构造 Get 对象的时候传入一个 rowkey 列表,这样一次 RPC 请求可以返回多条数据。

Get 对象可以设置列与 filter,只获取特定 rowkey 下的指定列的数据。

Scan 是范围查询,通过指定 Scan 对象的 startRow 与 endRow 来确定一次扫描的数据范围,获取该区间的所有数据。

一次由客户端发起的完成的读流程,可以分为两个阶段:

  1. 第一个阶段是客户端如何将请求发送到正确的 RegionServer 上;
  2. 第二阶段是 RegionServer 如何处理读取请求。

客户端如何发送请求到指定的 RegionServer

HRegion 是管理一张表一块连续数据区间的组件,而表是由多个 HRegion 组成,同时这些 HRegion 会在 RegionServer 上提供读写服务。

所以客户端发送请求到指定的 RegionServer 上就需要知道 HRegion 的元信息,这些元信息保存在 hbase:meta 这张系统表之内,这张表也在某一个 RegionServer 上提供服务,而这个信息至关重要,是所有客户端定位 HRegion 的基础所在,所以这个映射信息是存储在 zookeeper 上面。

客户端获取 HRegion 元信息流程图如下:
在这里插入图片描述
以单条 rowkey 的 Get 请求为例,当用户初始化到 zookeeper 的连接之后,并发送一个 Get 请求时,需要先定位这条 rowkey 的 HRegion 地址。

如果该地址不在缓存之中,就需要请求 zookeeper (箭头1),询问 meta 表的地址。

在获取到 meta 表地址之后去读取 meta 表的数据来根据 rowkey 定位到该 rowkey 属于的 HRegion 信息和 RegionServer 的地址(箭头2);

缓存该地址并发 Get 请求点对点发送到对应的 RegionServer(箭头3),至此,客户端定位发送请求的流程走通。

RegionServer 处理读请求

在 RegionServer 端,Get 请求被当做特殊的一次 Scan 请求处理,其 startRow 和 StopRow 是一样的。

这里不详细展开,Hbase使用者只需要知道给定一个 rowkey 可以根据索引结合二分查找可以迅速定位到对应的数据块即可。

详情可参考 :https://www.iteblog.com/archives/2516.html


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值