51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

HBase 分区过多有什么影响

1.频繁刷写

Region 的一个列族对应一个 MemStore,假设 HBase 表都有统一的 1 个列族配置,则每个
Region 只包含一个 MemStore。通常 HBase 的一个 MemStore 默认大小为 128 MB,见参数
hbase.hregion.memstore.flush.size。当可用内存足够时,每个 MemStore 可以分配 128 MB
空间。当可用内存紧张时,假设每个 Region 写入压力相同,则理论上每个 MemStore 会平
均分配可用内存空间。
因此,当节点 Region 过多时,每个 MemStore 分到的内存空间就会很小。这个时候,写入
很小的数据量就会被强制 Flush 到磁盘,将会导致频繁刷写。频繁刷写磁盘,会对集群 HBase
与 HDFS 造成很大的压力,可能会导致不可预期的严重后果。

2.压缩风暴

因 Region 过多导致的频繁刷写,将在磁盘上产生非常多的 HFile 小文件,当小文件过多的
时候 HBase 为了优化查询性能就会做 Compaction 操作,合并 HFile 减少文件数量。当小文
件一直很多的时候,就会出现 "压缩风暴"。Compaction 非常消耗系统 io 资源,还会降低数
据写入的速度,严重的会影响正常业务的进行

3.MSLAB 内存消耗较大

MSLAB(MemStore-local allocation buffer)存在于每个 MemStore 中,主要是为了解决 HBase

内存碎片问题,默认会分配 2 MB 的空间用于缓存最新数据。如果 Region 数量过多,MSLAB

总的空间占用就会比较大。比如当前节点有 1000 个包含 1 个列族的 Region,MSLAB 就会

使用 1.95GB 的堆内存,即使没有数据写入也会消耗这么多内存

赞(0)
未经允许不得转载:工具盒子 » HBase 分区过多有什么影响