l Zookeeper会话过期时间,zookeeper会话过期默认4~40s。当业务系统繁忙时很容易就过期被断开,所以需要加大zookeeper的会话过期时间(60~180s)SessionTimeout
l Zookeeper连接会话数,Zookeeper默认允许单IP连接会话60,当多线程多时很容易被拒绝连接,所以需要加大zookeeper允许的连接会话数量(300/500)maxClientCnxns
l hbase.regionserver.handler.count,服务端处处理rpc实例数量,默认30根据实际情况调整(60~120)
l hbase.hregion.max.filesize(default:256M),hregion大小
l hbase.regionserver.global.memstore.upperLimit/lowerLimit(0.4/0.35),memstore持久化时的利用率
l hfile.block.cache.size(default:0.2)
l hbase.hstore.blockingStoreFiles(default:7)
l Rowkey设计长度不能过长,尽量控制在16~100字节内,过长对存储空间耗费巨大
l Rowkey设计应该散列,将Rowkey的高位作为散列字段,将提高数据均衡分布在每个Regionserver实现负载均衡的几率
l Rowkey设计应该包含所有查询字段,如果使用HBase实现灵活的查询,则需要把所有需要查询的字段都放在rowkey中,避免基于Qulifier查询
l Rowkey设计如果有排序要求则尽量倒排,Rowkey默认按照字典序排列,及ascii越大越排在下面。当有按时间或使用量查询的需求时,应该尽量实现倒排
l 列簇设计不能过多(低于3个),列簇名称不能过长(低于8个字符)
l Qualifier不应过多,列数据以key-value存储,列过多导致重复key过多,存储耗费大
l 列簇设置版本,根据实际需要设置存储的版本数量,默认为3,如果只需要保存最新版本的数据,那么可以设置setMaxVersions(1)
l 列簇设置生存周期,如果只需要存储一段时间的数据,则可以设置列数据的生存周期,如存储3个月~12个月
l 创建分区表,根据rowkey范围创建分区表createTable(HTableDescriptordesc,byte [] startKey, byte [] endKey,intnumRegions);createTable(final HTableDescriptor desc, byte [][] splitKeys)
l HConnection连接池机制,新创建HConnection比较耗资源,实现HConnection池重用HConnection对象HConnectionFactory implements PoolableObjectFactory
l 客户端批量操作,客户端设置setAutoFlush设为false,并根据需要设置buffer大小,默认hbase.client.write.buffer为2M大小,可以自定义设置setWriteBufferSize
l 尽可能使用HTable.put)
方法一次写尽可能多的数据,减少网络IO
实时数据尽量使用mysql/oracle数据库,统计数据使用hbase数据库
代码案例