HBase中Region的分裂和合并问题分析

本文主要介绍了HBase中Region分裂与合并的相关内容。当MemStore数据或Region中最大Store大小超阈值时会触发Region分裂,以实现负载均衡,还阐述了分裂流程、分割点确定及执行时间。同时说明了Region合并,包括minor合并和major合并,可减少读取IO。
部署运行你感兴趣的模型镜像

Region分裂

当MemStore的数据超过阈值时,将数据溢写磁盘,生成一个StoreFile文件。当Region中最大Store的大小超过阈值时,Region分裂,等分成两个Region,实现数据访问的负载均衡。新的Region的位置由HMaster来确定在哪个RegionServer中。

下面是具体的细节:

1.当一个region里的StoreFile增长到大于配置的参数:hbase.hregion.max.filesize的大小,也可以在创建HBase表的时候指定这个参数,region会被一分为二。这个过程一般在2-3S内完成,对写数据的影响有短暂的暂停, 由于zookeeper全程记录分裂过程 ,因些分裂服务器失败的时候,其它服务器是可以知道这个region的状态 ,分裂在高并发写的情况下,影响非常大,如何减少在写入过程中region的分裂,是利用好HBase的关键所在,整个分裂是的流程如下:

  • region所在regionServer创建splits目录;
  • 关闭要分裂的region的读写请求;
  • 在splits目录中创建所需要的文件结构;
  • 移动两个新region文件目录到目录表中,并更新.META表;
  • 异步复制父region中的数据到两个子region中(最主要的消耗时间);
  • 复制完成后、打开两个新产生的region,并上线,可以接收新的读写请求;
  • 异步任务把定时把原来被分裂的region从.META表中清除掉,并从文件系统中删除该region所占用的空间;

2.分割点的确定: Region中StoreFile最大文件中的内部中点

3.执行Region分裂的时间是: memStore刷到HDFS的时候,后台线程异步执行,所在类名为MemStoreFlusher.

Region合并

1.随着MemStore不断有数据写入,当MemStore的大小超过配置或默认大小的时候,HBase会把MemStore中的数据刷新到HDFS中,生成新的StoreFile文件 ,当一个region中包含的StoreFile文件数目超过配置地的阈值,后台合并任务,会把这些文件合并成数量更少,体积更大的文件。

2.当这个过程持续到这些文件 中最大的StoreFile文件 超过配置最大存储文件 大小时,此时会触发一个region拆分操作,减少读取过程中的IO。

3.Region合并分为两种,minor合并和major合并
3.1 Minor合并:
是把最后生成的几个小的StoreFile文件 合并一个更大的StoreFile, 默认同时合并的文件数为10, 主要控制参数如下;
hbase.hstore.compaction.min最小合并文件 数量大小, 默认为3
hbase.hstore.compaction.max 最大合并文件 数量大小, 默认为10
hbase.hstore.compaction.max.size 最大合并文件 的大小 , 默认值 为Long.MAX_VALUE
hbase.hstore.compaction.min.size 最小合并文件 的大小, 默认值是memStore刷写的大小, 它是一个阈值, 它包含所有小于限制的文件 ,直到达到每次压缩允许的总文件数量

3.2 Major合并:
是把整个Store中所有StoreFile文件 合并成一个单独的StoreFile文件,后台定时任务定期检查, 这个检查周期是由下面这两人个参数决定
hbase.server.thread.wakefrequency * hbase.server.thread.wakefrequency.multiplier(默认值为1000)

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### HBase Region 概念 在 HBase 中,Region 是表数据分布的基本单位,每个表一开始只有一个 Region,随着数据不断插入,Region 会不断分裂[^5]。Region 是水平划分的,每个 Region 包含一定范围的行键(RowKey)。当 Region 的大小达到一定阈值时,会自动分裂为两个新的 Region,这一机制确保了数据的均匀分布系统的可扩展性。 Region 本质上是存储 HBase 表数据的容器,它由多个 Store 组成,每个 Store 对应一个列族(ColumnFamily)。Store 内部由 MemStore 多个 StoreFile(HFile)组成,负责数据的写入读取。RegionHBase 分布式存储的核心概念,它决定了数据如何在集群中分布管理。 ### HBase Region 的管理机制 #### Region 分裂 Region分裂是自动进行的。当某个 Region 的大小超过预设的阈值(如 `hbase.hregion.max.filesize`,默认为 10GB),该 Region 会被拆分为两个新的 Region,以确保数据的分布不会过于集中。这种分裂机制有助于负载均衡,提高系统的性能可扩展性[^5]。 #### Region 分配 Region 被分配到合适的 RegionServer 上进行管理。例如,一张表被切分为多个 Region,这些 Region 会被分配到不同的 RegionServer 上,以充分利用多台机器的 IO 能力。当用户执行查询操作时,HBase 会将请求路由到对应的 RegionServer,从而实现分布式查询负载均衡[^2]。 #### Region 定位 HBase 使用 ZooKeeper 来维护 Region 的元数据信息。当客户端需要访问某个 Region 时,首先会通过 ZooKeeper 获取 Region 的位置信息,然后直接与对应的 RegionServer 通信。这种机制确保了 Region 的高效定位访问。 #### Region 负载均衡 当 Region 的分布不均匀时,HMaster 会触发负载均衡操作,将部分 Region 从负载较高的 RegionServer 迁移到负载较低的 RegionServer。这一过程会导致涉及的 Region 暂时失去数据本地性(即 HFile Region 不在同一个 DataNode 上),但会在下一次 Major Compaction 时恢复数据本地性[^3]。 #### Region 的迁移与容错 Region 通常属于一个 RegionServer,除非该 RegionServer 宕机、主动下线或触发负载均衡操作,Region 才会被迁移到其他 RegionServer 上[^4]。这种机制确保了系统的高可用性,即使某个 RegionServer 出现故障,Region 仍然可以在其他节点上继续提供服务。 ### Region 的生命周期管理 Region 的生命周期包括创建、分裂、迁移、合并删除等操作。HMaster 负责整个集群的 Region 管理,包括 Region 的分配、负载均衡以及故障恢复。RegionServer 负责具体的 Region 服务,包括数据的读写、MemStore 的刷写、StoreFile 的合并等操作。 ### 示例代码:查看 HBase 表的 Region 信息 以下是一个简单的 HBase Shell 命令,用于查看表的 Region 信息: ```shell hbase> describe 'your_table_name' ``` 此外,可以使用 `hbase hbck` 工具检查 Region 的一致性,或者使用 `hbase shell` 执行以下命令查看 Region 的分布情况: ```shell hbase> scan 'hbase:meta', {FILTER => "PrefixFilter('your_table_name')"} ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值