项目中的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<List<Put>)方法一次写尽可能多的数据,减少网络IO

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



代码案例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值