2 个回答
Hbase的Region的动态划分过程如下:
1、建表:在建表时,可以手动去指定预分区数,这个指定的预分区数量,Hbase会初始化创建对应数量的region个数。
2、切分:主要体现在两方面,分别是:
1、建表:在建表时,可以手动去指定预分区数,这个指定的预分区数量,Hbase会初始化创建对应数量的region个数。
2、切分:主要体现在两方面,分别是:
1)自动切分的触发策略:在 Hbase 中应该有六种触发策略。但是我们经常用的最多三种。下述以 ConstantSizeRegionSplitPolicy 为例。
a)ConstantSizeRegionSplitPolicy:0.94版本前默认切分策略
b)I ncreasingToUpperBoundRegionSplitPolicy : 0.94版本~2.0版本默认切分策略
c)SteppingSplitPolicy: 2.0版本默认切分策略
2)在使用表时,随着时间推移,写入越来越多的数据,当Region大小超过一定阈值时,会进行自动split,该阈值通过 hbase.hregion.max.filesize 参数设置,默认为10G。如果列组的任意一个 HStoreFile 超过此值,则托管HRegion 将分割成两个。
3、合并:将两个或多个相邻的 Region 合并成一个更大的 Region,Region 合并的目的是优化数据存储和管理,减少 Region 的数量,提高查询性能和资源利用率。发布于:3个月前 (01-24) IP属地:四川省
4、重平衡:当region合并或分裂之后,RegionSrever之间的region数量差距变大时,HMaster便会执行负载均衡来调整部分region的位置,使得每个RS的region数量保持在合理范围之内,负载均衡会引起region的重新定位,使得涉及的region不具备数据本地性,即HFile和region不在同一个DataNode。这种情况会在major compaction 之后得到解决。
对应的Rebalance 的策略:
对应的Rebalance 的策略:
1、SimpleLoadBalancer :这种策略能够保证每个 RegionServer 的 Region 个数基本相等, 假设集群中一共有n个 RegionServer,m个 Region,那么集群的平均负载就是average=m/n. 其负载的就是 Region 个数,集群负载迁移计划就是 Region 从个数较多的RegionServer 上迁移到个数较少的 RegionServer 上.
2、StochasticLoadBalancer :HBase 默认策略, StochasticLoadBalancer是一种综合权衡以下6个因素的均衡策略: 每台 RegionServer 读请求数,每台 RegionServer 写请求数, 每台 RegionServer 的 Region 个数, 移动代价, 数据 locality, 每张表占据 RegionServer 中 region 个数上限. 对于 cluster 的每一种 region 分布,采用6个因素加权的方式算出一个代价值,这个代价值就用来评估当前 region 分布是否均衡,越均衡则代价值越低. 然后通过成千上万次随机迭代来找到一组 RegionMove 的序列,使得最终的代价值严格递减. 得到的这一组 RegionMove 就是 HMaster 最终执行的 region 迁移方案.
发布于:3个月前 (01-24) IP属地:四川省
我来回答
您需要 登录 后回答此问题!