codecamp

HBase区域数量

对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个区域将生成太多的任务。

HBase:禁用WAL
HBase区域服务器分配
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

HBase快速入门

HBase批量加载

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }