我们主要考虑的硬件资源:内存、CPU、磁盘
CPU
CPU资源:HBase是一个CPU敏感型业务,无论数据写入读取,都会因为大量的压缩解压操作,特别耗费计算资源。因此对于HBase来说,CPU越多越好。
内存、磁盘
官方文档给出的一个推荐范围region个数在20~200之间,而单个Region大小控制在10G~30G。
磁盘与内存的对应
公式:
Disk Size / Java Heap = RegionSize / (MemstoreSize * ReplicationFactor * HeapFractionForMemstore )公式由来
硬盘容量纬度下Region个数:Disk Size / (RegionSize *ReplicationFactor)
Java Heap纬度下Region个数:Java Heap * HeapFractionForMemstore / MemstoreSize参数配置
对应HBase/HDFS配置参数:
hbase.hregion.max.filesize/(hbase.hregion.memstore.flush.size *dfs.replication * hbase.regionserver.global.memstore.lowerLimit)-
示例
按以下默认配置(0.94版本)
- 10GB regions
- 128M memstores
- HDFS replication factor of 3
- RegionServer中所有MemStore存在JVM内存中的比例上限 0.4
得到10GB/128MB*3*0.4 = 96
Hlog
HBase对于每一个regionserver配置hlog的参数
hbase.regionserver.hlog.blocksize = HDFS block size
hbase.reionserver.logroll.mutiplier = 0.95
hbase.reiongserver.maxlogs = 32
hbase.regionserver.global.memstore.lowerLimit <=
hbase.regionserver.hlog.blocksize*
hbase.reionserver.logroll.mutiplier*
hbase.reiongserver.maxlogs
128MB * 0.95 * 32 = 4T >= 10GB * 0.4
参考:
http://hadoop-hbase.blogspot.com/2013/01/hbase-region-server-memory-sizing.html