HBase区域数量

2018-06-01 14:14 更新

对HBase区域数量的考虑

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

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

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

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

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

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号