非关型数据库之Hbase(三)

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
注册配置 MSE Nacos/ZooKeeper,182元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 非关型数据库之Hbase(三)

5.2 Region再细分

       Hbase的核心模块是RegionServer,RegionServer又由HLog和Region构成,Region存储着一系列连续的数据集。Region对应着和多个的Store,每个Store对应着表中的一个列族的存储,Store又是由一个MemStore和零到多个的StoreFile组成,StoreFile的底层是用HFile实现,也可以说StoreFile就是HFile。

image.png

                     


5.2.1 Hbase写数据

(获取元数据)客户端访问Zookeeper,从Meta表中得到数据写入的Region和RegionServer的相关信息

(两次写信息)客户端按照Zookeeper返回的相关信息,直接访问RegionServer把数据分别写入HLog和MemStore。

(持久化数据)当MemStore的存储量达到一定阈值(默认64M)时,会把数据写入磁盘文件StoreFile中,并在HLog中写入一个标记表示MemStore中的缓存数据写入到StoreFile中。如果MemStore中的数据丢失,则可以在HLog中恢复。

(StoreFile合并分裂)StoreFile文件的数量达到一定的数量时,会触发合并成一个大的StoreFile,当StoreFile的文件大小超过一定的阈值时,大StoreFile会分裂成两个StoreFile。同时,当前父Region会分裂成两个子Region,父Region下线,两个子Region被Master分配到相应的RegionServer(父Region拆分的原因参考 5.4Region拆分)。

image.png

5.2.2 Hbase读数据

(获取元数据)客户端访问Zookeeper,从Meta表中得到读取数据的Region和RegionServer的相关信息

(发送请求)客户端向对应的RegionServer发送读取数据请求

(查找数据)RegionServer在就收到请求消息之后,现在MemStore中查找数据,如果没有就到StoreFile中读取,最后将数据返回给客户端。

5.2.3 HFile的合并(Minor|Major)

Minor合并(满足条件的小HFile进行合并)


       执行合并时,Hbase将多个小HFile的内容读出并写入到一个新的文件中,然后激活新文件,旧文件标记为删除,被标记后的旧文件只有在下一次Major合并时才会被删除,在此之前仍会出现在HFile中。HFile的Minor合并是触发式的,触发条件很多,比如在将MemStore中的数据刷新到HFile中时会申请对符合条件的HFile进行合并,定期合并等。除此之外,对选择进行合并的HFile文件也是有条件的,条件如下:

image.png



也就是说,一次Minor合并的HFile文件的个数在3~10个之间。


Major合并(无差别合并)


       Major合并会对Store中的所有HFile文件进行无差别的合并,甚至有时会将整个表中同一列族的HFile进行合并,这是一个耗时且耗费资源的操作,很影响集群的性能。故一般情况下都只做Minor合并,不做甚至有些集群干脆就禁止Major合并,只有在集群负载较小时才进行手动的Major合并,或者配置Major的合并中期,默认为7天。


5.3 WAL机制

       WAL就是(Write Ahead Log),字面翻译就是预写日志文件机制。如下图所示,每个RegionServer中的所有Region共用一个HLog文件,HLog就是上面说到的预写日志文件,也就是说,每当客户端更写数据必须先写入到HLog文件后才能被写入到MemStore中。


       故障转移:Zookeeper会实时监控每个Regionserver的状态,当某个RegionServer故障时,RegionServer在Zookeeper上的临时节点就会过期,Zookeeper会首先通知Master,Master会第一时间处理该RegionServer上的HLog文件,对其按照Region进行拆分并放到相应Region的目录下,等到Region被重新分配到可用的RegionServer上时,按照Region目录下的HLog进行数据恢复。


image.png


5.4 Region拆分

       一旦Region的负载过大或者超过阈值时(Region中最大的Store的大小大于设置的阈值时就会触发Region拆分),它就会被拆分成两个新的Region,这个过程是由RegionServer来完成的,具体流程如下:


(下线并阻止请求)下线需要拆分的Region,阻止所有对该Region的客户端请求,Master检测到Region的状态为SPLITING。

(建立引用文件并指向)在父Region的下面建立两个引用文件,分别指向父Region的首行与末行,此时并不会开始复制数据。

(建立目录并复制)在HDFS上建立两个子Region的目录,分别复制上一步建立的引用文件,每个子Region分别占用父Region的一半数据,复制完成后删除两个引用文件。

(更新Meta表元数据)完成子Region的创建后,向Meta表发送新产生的两个Region的元数据信息,删除父Region的元数据信息。

(更新状态)将Region的拆分信息更新到HMaster中,并且每个Region进入可用状态。

5.5 Region合并

(发送请求)客户端发送Region合并请求给Master。

(聚堆并发送请求)Master在RegionServer上将Region移到一起,并发起一个Region合并操作的请求。

(下线并合并)RegionServer将准备合并的Region下线,然后进行合并。

(更新元数据)从Meta表上删除被合并的Region的元数据,并写入新的Region的元数据。

(更新状态及信息)新的Region设置上线,同时更新Region信息到Master。

       Region合并的必要性:Region过多会导致Meta表过大,Zookeeper管理不过来,从而影响客户端的请求响应。


相关文章
|
5月前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
204 12
|
分布式计算 Java Hadoop
杨校老师课堂之分布式数据库HBase的部署和基本操作
杨校老师课堂之分布式数据库HBase的部署和基本操作
155 0
|
存储 SQL 分布式数据库
深入解析HBase与关系数据库的关键差异
【8月更文挑战第31天】
296 0
|
存储 NoSQL Java
HBase是一个开源的、分布式的、面向列的NoSQL数据库系统
HBase是一个开源的、分布式的、面向列的NoSQL数据库系统
256 0
|
存储 分布式计算 Hadoop
【大数据】分布式数据库HBase下载安装教程
【大数据】分布式数据库HBase下载安装教程
521 0
|
4月前
|
分布式计算 Ubuntu Hadoop
Ubuntu22.04下搭建Hadoop3.3.6+Hbase2.5.6+Phoenix5.1.3开发环境的指南
呈上,这些步骤如诗如画,但有效且动人。仿佛一个画家在画布上描绘出一幅完美的画面,这就是你的开发环境。接下来,尽情去创造吧,祝编程愉快!
237 19
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
252 4
|
11月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
238 4
|
11月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
112 3
|
11月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
147 3