理论教育 HRegion的split和compact操作优化技巧

HRegion的split和compact操作优化技巧

时间:2023-06-14 理论教育 版权反馈
【摘要】:每个表开始只有一个HRegion,随着数据不断插入,HRegion 不断增大。当合并的时候,会将HRegion 中的同一列族对应的StoreFile 合并,又会逐渐形成越来越大的StoreFile,当单个StoreFile 大小超过一定阈值后,又会触发所在HRegion 的split 操作,也就是说HRegion 再循环的执行split 和compact,但并不是无限的执行下去,一般来说单个StoreFile 文件大小达到6.2G 时就会停止split,避免在HRegion 过大时频繁split 的影响HBase 的性能。

HRegion的split和compact操作优化技巧

在HBase 中split(切分)是一个很重要的功能,HBase 是通过把数据分配到一定数量的HRegion 来达到负载均衡的。每个表开始只有一个HRegion,随着数据不断插入,HRegion 不断增大。当一个HRegion 中的StoreFile 增大到一个阀值的时候(256M),HRegion 就会被分成两个新的HRegion。

客户端写入数据时,首先将其存入WAL,然后放入MemStore,最后保存到StoreFile。当StoreFile 文件数量增长到一定阈值,会触发Compact(合并)操作,将多个StoreFile 文件合并成一个StoreFile,而大文件恰恰又是HDFS 所擅长。合并过程中会进行版本合并和数据删除,因此可以看出HBase 只是增加数据,所有的更新和删除操作,都是在合并阶段做的,客户端写操作只需要进入到内存即可立即返回,从而保证HBase 读写的高性能。

表在HRegion 中是按照Row Key 来排序的,并且一个Row Key 所对应的行只会存储在一个HRegion 中,而一个列族占用一个StoreFile,因此当切分的时候一个HRegion 中的StoreFile 文件大小各不相同。甚至有可能出现一个列族已经有1 000 万行,而另外一个才100 行的情况,当HRegion 分割的时候,会导致100 行的列会同样分布到多个HRegion 中,所以一般建议不要设置多个列族。(www.daowen.com)

当合并的时候,会将HRegion 中的同一列族对应的StoreFile 合并,又会逐渐形成越来越大的StoreFile,当单个StoreFile 大小超过一定阈值后,又会触发所在HRegion 的split 操作,也就是说HRegion 再循环的执行split 和compact,但并不是无限的执行下去,一般来说单个StoreFile 文件大小达到6.2G 时就会停止split,避免在HRegion 过大时频繁split 的影响HBase 的性能。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈