项目中的HBase优化

1      HBase优化

1.1    配置优化

l  Zookeeper会话过期时间,zookeeper会话过期默认440s。当业务系统繁忙时很容易就过期被断开,所以需要加大zookeeper的会话过期时间(60180sSessionTimeout

l  Zookeeper连接会话数,Zookeeper默认允许单IP连接会话60,当多线程多时很容易被拒绝连接,所以需要加大zookeeper允许的连接会话数量(300/500maxClientCnxns

l  hbase.regionserver.handler.count,服务端处处理rpc实例数量,默认30根据实际情况调整(60120

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)

 

1.2    设计优化

l  Rowkey设计长度不能过长,尽量控制在16100字节内,过长对存储空间耗费巨大

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)

 

1.3    程序优化

l  HConnection连接池机制,新创建HConnection比较耗资源,实现HConnection池重用HConnection对象HConnectionFactory implements PoolableObjectFactory

l  客户端批量操作,客户端设置setAutoFlush设为false,并根据需要设置buffer大小,默认hbase.client.write.buffer2M大小,可以自定义设置setWriteBufferSize

l  尽可能使用HTable.put)方法一次写尽可能多的数据,减少网络IO

实时数据尽量使用mysql/oracle数据库,统计数据使用hbase数据库



代码案例

你可能感兴趣的:(hadoop)