跳至主要內容

九十七、HBase区域数量

安图新大约 2 分钟HBase

对HBase区域数量的考虑

一般来说,HBase被设计为每台服务器运行一个较小的(20-200)数量相对较大的(5-20Gb)区域。对此的考虑如下:

为什么我应该保持我的区域数低?

通常情况下,由于多种原因,您希望在HBase上保持较低的区域。通常每个RegionServer大约有100个区域产生了最好的结果。以下是保持区域数低的一些原因:

1、 MSLAB(MemStore本地分配缓冲区)需要每个MemStore2MB(每个区域的每个家庭2MB)1000个有两个家族的区域使用了3.9GB的堆,甚至还没有存储数据注意:2MB值是可配置的;
2、 如果以相同的速率填充所有区域,则全局内存使用情况会导致当您的区域太多而又产生压缩时,它会强制进行微小刷新重写相同的数据几十次是你想要的最后一件事一个例子是平均填充1000个区域(有一个家族),让我们考虑一下5GB的全局MemStore使用的下限(区域服务器会有一个大堆)一旦它达到5GB,它将强制刷新最大的区域,那时它们应该几乎全部都有大约5MB的数据,所以它会冲洗这个数量稍后插入5MB,它将刷新另一个区域,该区域现在会有超过5MB的数据,依此类推目前这是地区数量的主要限制因素;
3、 现在的主机对很多区域敏感,并且需要很多时间分配他们并分批移动他们原因在于它对ZK的使用很重要,目前它不是非同步的(可以真正改进–在0.96HBase中已经有所改进);
4、 在较早版本的HBase(前HFilev2,0.90和之前的版本)中,少数RS上的大量区域会导致存储文件索引上升,增加堆使用量,并可能在RS上创建内存压力或OOME;

另一个问题是区域数量对MapReduce作业的影响;每个HBase区域都有一个映射器是很典型的。因此,每个RS仅托管5个区域可能不足以获得足够数量的MapReduce作业任务,而1000个区域将生成太多的任务。

上次编辑于:
贡献者: Andy