7 Hbase 概述

一、什么是 Hbase

​ Hbase 是一个构建在 Hadoop 之上的高可用、高性能、多版本的分布式 NOSQL 数据库。

二、Hbase 的特点

2.1、与 hdfs 对比

​ Hbase 是构建在 Hadoop 之上的,Hadoop 不支持随即写,但 Hbase 支持。

2.2 、与传统数据库的比较:

​ 1、传统数据库无法存储很大量的数据,但 Hbase 可以通过增加节点的方式来存储海量数据。

​ 2、传统数据库没有很好的备份机制,但 Hbase 把的文件存储是基于 hdfs 的,又健全的备份机制。

​ 3、传统数据库当数据量达到一定规模时速度就会很慢,而 Hbase 通过 Zookeeper 协调查找数据,访问速度快。

三、Hbase 存储数据的结构

3.1 逻辑结构

在这里插入图片描述

​ 从逻辑视图来看,Hbase 的数据是以表的形式组织的,而且和关系型数据库中的一样,Hbase 的表由行和列构成。

解释图中的元素

1、RowKey

​ rowkey 是用来检索记录的主键。访问 hbase table 中的数据,只有三种方式:通过单个 rowkey 访问;通过 rowkey 的范围;全表扫描。

​ rowkey 可以是任意字符串,存储时,数据按照 row key 的字典排序。因此在设计 key 时,要充分利用排序存储这一特性,将经常一起读取的行存储放到一起。

2、列簇(column family)

​ hbase 表中的每个列,都归属于某个列簇,列簇时 scheme 的一部分(而列不是),列命都以列簇为前缀。

3、单元(cell)

​ hbase 中通过 row 和 columns 确定的唯一一个存储单元称为 cell。

​ cell 是没有数据类型的,全都是以字节码的形式存储。

4、时间戳(timestamp)

​ 每个 cell 都保持着同一数据的多个版本,版本通过时间戳来索引。

3.2 物理结构

在这里插入图片描述

​ 把每一个列簇单独地存储成一列,可以极大地节省空间。

三、Hbase 架构

在这里插入图片描述
解释图中元素

1、Client

​ 客户端访问 hbase 数据之前,首先通过源数据表定位目标数据所在的 RegionServer,之后才会发送请求到 RegionServer,同时这些元数据会被缓存到本地,方便以后的请求访问。如果 RegionServer 因为发生宕机或者执行了负载均衡等导致数据分片发生迁移,客户端需要重新请求最新的元数据并缓存到本地。

2、Zookeeper

​ Zookeeper 是一个分布式的协调服务。

​ 在 hbase 中,Zookeeper 负责管理 Hbase 的核心元数据,如 Master 和 RegionServer 的状态、元数据表所在的 RS 地址等。

3、Master

​ 1)Master 负责处理用户的管理请求,例如:用户的增删改查操作。

​ 2)协调 RegionServer:为 RS 分配 Region;发现失效的 RS 并重新分配位于其上的 Region;通过 ZK 监控集群上所有 RS 的运行状态。

​ 3)清理过期的 HLog 和 HFile

4、RegionServer

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WdsGfeV-1585267965505)(D:\study\note\大数据\Hadoop\regionServer.png)]

​ 1)响应用户的 I/O 请求,向 HDFS 中读写数据。

​ 2)内部管理了一系列 HRegion 对象,每个 HRegion 对应 table 中的一个 Region,HRegion 由多个 Htore 组成,每个 Store 对应 table 中的一个 列簇。

5、HLog

​ 1)实现数据的高可靠性:hbase 数据写入并不是直接写入 HFile,而是先写入缓存,再异步刷新罗盘。为防止数据丢失,数据写入缓存之前先写入 HLog,这样,即使缓存数据丢失,仍然可以通过 HLog 恢复。

​ 2)用于 hbase 集群间数据同步:通过回放主机群推送过来的 HLog 来实现主从集群间的数据同步。

6、BlockCache

​ 客户端从磁盘读取数据之后通常会将数据缓存到系统内存中,后续访问同一行数据可直接从内存中获取,对于大量热点读的业务请求来说,带来了极大的性能提升。

7、Region

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vAywjyTO-1585267965507)(D:\study\note\大数据\Hadoop\region.png)]

​ hbase 用 rowkey 把表 “水平切割” 成多个 Region,Region 代表的是数据表的一个分片,通常一个表的 Region 会分布在整个集群的多个 RS 上,一个 RS 上会存放来自不同表的多个 Region。

四、Hbase 读写数据流程

4.1 写数据流程

在这里插入图片描述

1、客户端处理阶段

​ 1)客户端提交 put 请求后,会将数据添加到本地缓冲区中,符合一定条件时就异步批量提交。

​ 2)客户端到 hbase:meta 中根据 rowkey 找到它们归属的 RegionServer。批量请求时会把这些 rowkey 按照不同的 RegionServer 分组。

​ 3)客户端发送 RPC 请求给对应的 RegionServer。

2、Region 写入阶段

​ 1)RS 收到请求后,首先反序列化 put 对象,执行各种检查(region是否只读,Memstore是否超过指定大小等)

​ 2).建立行锁(Acquire locks)->2.更新写入时间->3.创建WAL edit对象->4.WAL edit写入Hlog->5.数据写入MemStore->6.释放行锁->7.刷写Hlog到HDFS->8.结束事务

3、MemStore Flusn 阶段

​ 当Region中的MemStore容量超过一定阈值,系统会异步执行flush操作,将内存中的数据写入文件,形成HFile

4.2 读数据流程

1、第一次读数据

在这里插入图片描述

​ 1)从 Zookeeper 中获取 hbase:meta 的位置,缓存该位置信息

​ 2)从 hbase:meta 中查询用户 table 对应请求的 rowkey 所在的 RegionServer,缓存该位置信息。

​ 3)从查询到的 HRegionServer 中读取 Row。

2、第一次以后读数据

先查询缓存里能不能找到 Row 对应的 RegionServer,找到就直接做上面的第三步,找不到就依据情况从第一或者第二步开始。

发布了42 篇原创文章 · 获赞 3 · 访问量 2044

猜你喜欢

转载自blog.csdn.net/stable_zl/article/details/105133260
今日推荐