HBase原理详细概述

HBase,Hadoop DataBase的简称
是一种非关系型数据库,not only SQL。
HBase是一个分布式的架构,底层是HDFS的架构,由各个DataNode组成。

一、Hbase架构原理

HBase是主从结构,如下图所示,由Client、Zookeeper、HMaster、HRegionServer、HDFS等几个组件组成
在这里插入图片描述

1、Client:

  • 客户端,可以是HBase Shell、JavaAPI客户端、RestAPI等。
  • 提供访问接口,维护对应的缓存加速HBase的访问
  • Client缓存Region的位置信息,减少获取源数据的时间
  • 首次请求时加载cache,后面直接使用cache中的信息

2、Zookeeper:

通过ZK来做HMaster的高可用、HRegionServer的监控、元数据的入口以及集群配置的维护

  • 选举机制保证集群中只有一个HMaster
  • 监控HRegionServer状态,HRS异常时,通过Master收到ZK的通知(上下线)
  • 通过ZK存储元数据的统一入口地址
  • .ZooKeeper 中存储了 hbase:meta 表的位置,客户端可以通过 ZooKeeper 查 找到 hbase:meta 表的位置,hbase:meta 是 hbase 当中一张表,肯定是由一个 HRegionServer 来 管 理 , 其 实 主 要 就 是 要 通 过 ZooKeeper 的 “/hbase/meta-region-server”获取存储“hbase:meta”表的 HRegionServer 的地 址。

3、HMaster

  • 监控HRS,HRegionServer停机后,处理HRS的故障转移。
  • HRegion分裂后,负责新的HR的分配
  • 处理元数据的变更,比如对表的增删改操作
  • 在空闲时间对数据进行负载均衡,调整HRegion分布,在HRS间迁移HR以达到负载均衡
  • 通过Zookeeper发布自己的位置给客户端

4、HRegionServer

HRegionServer负责响应用户读写的IO请求,一台机器一个,功能如下

  • 和底层HDFS交互,存储数据到HDFS
  • 处理分配给它的HRegion
  • 刷新缓存到HDFS
  • 维护HLog日志存储文件
  • 处理来自客户端的读写请求
  • 负责处理HRegion变大后的拆分
  • 负责StoreFile的合并工作

5、HDFS

HDFS为HBase提供最终的底层数据存储服务,提供高可用的支持

  • 提供元数据和表数据的底层分布式存储服务
  • 数据多副本,保证集群的高可靠和高可用性

6、write-AheadLogs

  • 预写数据,写在内存之间,先写在一个叫做Write-Ahead logfile的文件中之后,在写入内存中。
  • 系统故障后,数据可以通过这个日志文件重建
  • HLog是每个HRS对应一个

7、HRegion

  • 表的横向切分,HBase表的分片
  • 一个表根据RowKey切分成HRegion分散存储在不同的HRS中,一个HRS中可以有多个不同的HRegion(可以是来自不同的表)
    在这里插入图片描述

8、Store

  • 每个HRegion内部又分为多个Store,一个Store对应表中的一个列簇
  • 即一个store,是由1/N的rowkey和一个列簇组成

9、MemStore

  • 内存存储,位于内存中,保存当前的数据操作
  • 当数据保存在WAL中之后,HRS会在内存中存储键值对

10、HFile

  • 磁盘上保存原始数据的实际物理文件
  • StoreFile是以HFile的形式存储在HDFS的
  • 文件内容是二进制

二、数据结构

1、RowKey

  • 功能:检索、排序、根据RowKey范围裂变
  • 被保存为字节数组,即字符串
  • 访问表中的某一行,可以根据Rowkey的具体某个值、RowKey的正则Range访问、全表扫描

2、Column Family

  • 可以理解为关系型数据表中的多列划分为HBase表的一列
  • 一个列簇对应HDFS上的一个目录
  • 列簇是标的schema的一部分(列不是),在使用表之前就需要被定义
  • 列名义列簇作为前缀,比如courses:history,courses:math 都属于 courses 这个列簇
  • 每一个列簇对应一个Store,也对应HDFS一个目录,类似Hive分区操作

3、Cell

  • 由{RowKey,ColumnFamily,Version}唯一确定的单元,可以看成是一个存储空间,类似Excel中的单元格。比如{RowKey=10,ColumnFamily,Version}
  • Version就是TimeStamp时间戳
  • Cell中数据没有类型,以字节码的形式存储

4、TimeStamp

  • 每个Cell都保存着同一份数据的多个版本,版本通过时间戳来索引
  • 由HBase在数据写入时自动赋值,64位整型,精确到毫秒的当前系统实际
  • 两种数据版本回收方式:保存数据的最后n个版本;保存最近一段时间的内版本(比如最近七天)

三、HBase原理

1、元数据存储

  • 可以通过60010WebUI查看hbase:eta存储的元数据信息
  • scan 'hbase:meta’查看表元数据信息的内容,一行对应一个单一的Region。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、读流程

在这里插入图片描述

  • Client 先访问 ZooKeeper,查找-ROOT-表,获取.META.表信息,然后从 meta 表读取 Region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 Region 信息;
  • 根据 RowKey 在 meta 表中找到对应的 Region 信息;
  • 找到这个 Region 对应的 RegionServer;
  • 查找对应的 Region;
  • 先从 MemStore 找数据,如果没有,再到 BlockCache 里面读;
  • BlockCache 还没有,再到 StoreFile 上读(为了读取的效率);
  • 如果是从 StoreFile 里面读取的数据,不是直接返回给客户端,而是先写入 BlockCache,再返回给客户端。 从整体的方面看,如下图所示
    在这里插入图片描述

3、写流程

在这里插入图片描述

  • Client 先访问 ZooKeeper,查找-ROOT-表,获取.META.表信息,然后从 meta 表读取 Region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 Region 信息;
  • 根据 namespace(类似与关系型数据库中的数据库)表名和 RowKey 在 Meta 表中找到该 RowKey 应该写入到哪个 Region。
  • 找到这个 Region 对应的 RegionServer,并发送写数据请求
  • HRegionServer 将数据先写到 HLog(Write Ahead Log)。为了数据的持 久化和恢复;
  • HRegionServer 将数据写到内存(MemStore);
  • 反馈 Client 写成功。
    写数据这一块也可以看出,HBase 将数据写入到内存中后,就返回给客户端写入成功,响应非常快。这也是为什么 HBase 写数据速度快的原因。

4、数据Flush过程

  • HBase写数据写入到MemStore内存就会返回客户端,没有直接落盘,因此磁盘IO非常小,插入数据速度很快
  • 但当MenStore数据达到阀值(128M)时,HRS将数据刷到HDFS上生成HFile,然后将内存中的数据删除,同时删除HLog中的历史数据。
  • 该操作由HRS自己完成。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值