欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HBase架构、数据存储结构及工作原理分析

程序员文章站 2022-04-15 20:13:16
文章目录一、HBase介绍二、HBase架构1.主架构(1).Client(2).Zookeeper(3).HMaster()4.HRegionServer(5).HDFS2.其他组成部分(1).Write-Ahead Logs(2).HRegion(3).Store(4).MemStore(5).HFile三、HBase数据存储结构1.RowKey一、HBase介绍定义:HBase是一个面向列存储的数据库,它是一个分布式的hash map,并能够利用HDFS的可靠性来做存储功能。特点数据访问速...

一、HBase介绍

  1. 定义:HBase是一个面向列存储的数据库,它是一个分布式的hash map,并能够利用HDFS的可靠性来做存储功能。
  2. 特点
    1. 数据访问速度快,响应时间月约2-20ms
    2. 支持随机读写,每个节点20k~100k+ops/s
    3. 可扩展性,可扩展到20000+节点
  3. 应用场景
    1. 增量数据-时间序列数据——高容量、高速写入
    2. 信息交换-消息传递——高容量、高速读写
    3. 内容服务-Web后端应用程序——高容量、高速读写、
    4. 高并发

二、HBase架构

HBase是一种Master/slaves架构,主要的组成由下图可以看出,分别为:Client、zookeeper、HMaster、HRegionServer、HDFS。
HBase架构、数据存储结构及工作原理分析

1.主架构
(1).Client

  Client(客户端)可以是HBase shell,Java API或者是RestAPI。Client 就是用来访问 HBase 数据库的,它不仅提供了访问接口,还维护了对应的缓存(cache)来加速 HBase 的访问。Client 端的缓存主要是缓存 Region 的位置信息,减少获取元数据的时间。
  当 Client 端没有缓存的时候(第一次请求),会加载 Region 的位置信息到Client 端,后面直接使用 cache 中的信息,如果出现重试,则会重新获取 Region 的位置信息,更新 Client 端的 cache。

(2).Zookeeper

  HBase 通过 ZooKeeper 来做 HMaster 的高可用、HRegionServer 的监控、元数据的入口以及集群配置的维护等工作。它具体工作如下:

  1. 通过Zookeeper来保证集群中只有一个HMaster在运行,如果HMaster异常,会通过选举机制产生新的HMaster来提供服务
  2. 通过Zookeeper来监控HRegionServer的状态,当HRegionServer有异常,通过Master会受到Zookeeper消息通知HRegionServer上下线的信息
  3. 通过ZooKeeper存储元数据的统一入口地址
(3).HMaster

  HMaster节点是集群中的主节点,可以配置多个,用来实现HA,它的主要职责如下:

  1. 处理元数据的变更
  2. 监控HRegionServer,处理HRegionServer的故障转移。当某个HRegionServer挂掉时,Zookeeper会将分配在该HRegionServer上的HRegion分配到其他HRegionServer上进行管理
  3. 负责HRegionServer的负载均衡
  4. 通过Zookeeper发布自己的位置给客户端
  5. HRegion分裂后,负责新的HRegion的分配
()4.HRegionServer

  HRegionServer直接负责用户的读写请求,它的功能如下:

  1. 负责和底层HDFS的交互,存储数据到HDFS上
  2. 处理分配给它的HRegion
  3. 刷新缓存到HDFS上
  4. 维护HLog,Hlog是一个容错机制
  5. 处理来自客户端的读写请求。HRegionServer是管理数据的,所以客户端的读写请求最终都要由HRegionServer来处理
  6. 负责处理HRegion变大后的拆分工作
  7. 负责StoreFile的合并工作
(5).HDFS

  HDFS为HBase提供最终的底层数据存储服务,为HBase提供高可用的支持,具体功能如下:

  1. 提供元数据和表数据的底层分布式存储服务
  2. 数据多副本,保证高可靠性和高可用性
2.其他组成部分
(1).Write-Ahead Logs

   Write-Ahead Logs 也叫预写日志,在HBase中为HLog,HLogs存储在HDFS上。当HBase读写数据时,数据不是直接就写进磁盘的,也不是直接写入内存的,是首先写入到HLogs中,然后再写到内存中为了就是防止数据丢失。HLog是每一个HRegionServer对应一个。

(2).HRegion

   HRegion可以看成是表的横向切分,HBase表的分片,HBase每个表都会根据RowKey值被切分成不同的HRegion分散存储在HRegionServer中。一个HRegionServer中可以有多个HRegion。
   下图是HRegion、Table、HRegionServer的关系。
HBase架构、数据存储结构及工作原理分析
注:一个HRegion只能在一个HRegionServer上,不可以跨多个HRegionServer·

(3).Store

  每一个Region内部,又分为多个Store,一个Store对应表中的一个列族。也就是说一个Store存储了对应表该列族下的部分数据。

(4).MemStore

  内存存储,位于内存中,用来保存当前的数据操作。当数据保存在WAL中之后,HRegionServer会在内存中存储键值对。

(5).HFile

  这是磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的。

三、HBase数据存储结构

  HBase的特点是列的灵活性。在列族中,可以指定任意多的列,在列数据为空的情况下也不会占用存储空间。HBase的底层存储的数据是KeyValue格式的数据。

1.RowKey

  RowKey是用来检索数据的主键,不仅如此,HBase表数据会按照RowKey进行排序,并在HBase达到一定大小后,会按照RowKey范围进行裂变。
  Rowkey的值可以是任意字符串(最大长度为64KB)。在存储的时候,数据会按照RowKey进行字典排序,所以在设计RowKey的时候,要充分利用这个特性。

2.Column Family

  列族是HBase对表在纵向上的优化,列族是在纵向进行切分的,将一列分成一组进行管理。
  列族是表的schema的一部分,所以在时候前需要进行定义。每一个列族对应一个Store,也对应HDFS上的一个目录,类似于HBase对表按列族进行分区一样。

3.Time Stamp

  HBase中通过RowKey和ColumnFamily:column来确定一个存储单元,也就是一个cell。每一个cell中都保存着同一个数据的多个版本。版本需要 根据时间戳来索引。时间戳一般是由HBase在写入数据时自动赋值的。每一个cell中,每一个版本的数据都是按照时间顺序倒序排列的,最新的数据在最前面。

四、HBase原理

1.元数据存储

  HBase中有一个系统表meta用来存储HBase的元数据信息。该表记录了每一个表的Region地址,还有其他的一些信息。
  在zookeeper中存储了meta的位置,客户端可以通过zookeeper查找到meta表的位置。meta表示HBase中的一张表,是由HRegionServer来管理的。

2.读流程

  HBase的读数据流程如图所示
HBase架构、数据存储结构及工作原理分析
具体的工作流程如下:

  1. Client先访问zookeeper,请求获取meta的位置,然后通过meta表来读取Region的位置,从而获取meta表中的数据,且meta表中还存储了用户表的Region信息
  2. zookeeper会根据请求返回meta表所在RegionServer的位置。
  3. 用户根据RowKey在meta表中的位置来找到对应Region的信息
  4. 然后在找到对应的RegionServer
  5. 查找对应的Region
  6. 首先从MemStore找数据,如果没有再从BlockCache里面找
  7. 如果BlcokCache也没有,再到StoreFile里面找
  8. 如果是从StoreFile里面读取的数据,不会 直接返回给客户端,而是先写入到BlockCache里,再返回给客户端
    上述流程可以描述为下图:
    HBase架构、数据存储结构及工作原理分析
3.写流程

  HBase的写流程具体如下图所示
HBase架构、数据存储结构及工作原理分析
具体步骤为:

  1. Client访问zookeeper,获取meta表的位置
  2. 访问meta表,然后镀组meta表中的数据
  3. 根据namespace、表名、Rowkey,在meta表中找到该Rowkey应该写到哪一个Region
  4. 找到对应的Region对应的RegionServer后,发送写数据的请求
  5. RegionServer将数据先写到HLog中,为了数据的持久化和数据恢复
  6. 再讲数据写到MemStore中
  7. 反馈给Client写入成功
4.数据Flush过程

  从上面写数据可以看出,HBase写数据是写入到内存中就返回给客户端了,并不是直接落盘,这也就是为什么HBase插入数据会比较快。那什么时候数据会落入磁盘中呢?当MemStore数据达到阈值时(默认是128M),RegionServer会将数据刷到HDFS上,生成HFile文件,然后再将内存中的数据删除,同时还删除HLog中的历史数据。

本文地址:https://blog.csdn.net/qq_38497133/article/details/107495605