关于HBase性能的一些思考 - 配置篇
1.调整Write Buffer Size
Hbase在Put的时候,如果设置了autoflush=false,当等待写入的数据超过writebuffersize配置值的size时才提交写数据请求(通过hbase.client.write.buffer配置,默认为2M)。如果最后的写入数据没有超过2M,则在调用close方法时会进行最后的提交。所以对于实时性和不可丢失性不高的系统,可以设置autoflush=false,writebufferzie=5*1024*1024,Client用单条数据Put的API,这样可以控制提交次数,减少RPC的交互次数。但如果系统对实时性要求很高,还是需要将autoflush设为true并单条提交
2.压缩
当数据量很大时,可以将数据边写边压缩,从压缩率和压缩速度来看,推荐使用Snappy,需要在hbase-site.xml中配置
3.Compaction
当Hbase进行Major Compaction时,该Region将会合并所有的StoreFile,因此整个Region将处于不可读状态,会影响系统的使用。所以建议将Major Compaction关闭(hbase.hregion.majorcompaction=0),然后每天在系统空闲时间统一对所有表用cron执行major compaction
4.RPC数量
该配置定义了每个Region Server上RPC handler的数量,增加这个可以提高HBase接收请求的能力。默认hbase.regionserver.handler.count=10,是为了防止Region Server并发时吃光内存,实际可以视硬件情况改大一些
5.内存设置
在硬件允许的情况下,分配足够多的内存给HBase,修改hbase-env.sh,export HBASE_HEAPSIZE=3000 #这里默认为1000m
肯定还有其他的方法,这篇文章将在不断的深入中持续更新