HBase在资源紧张时降低IO的方案汇总

Hbase在资源紧张时降低IO的手段
以下优化手段的前提1、一切都是瓶颈的时候(内存、cpu、IO),所有手段都作用不大
2、没有绝对的有效手段,必须针对具体业务场景去分析
3、大多数情况下,都是磁盘IO存在问题(CPU和内存其实问题都不大,除非配置太差)
优化分类优化手段优化原理适用场景(前提)注意事项
表设计适当增加列族个数,一起读写的列放在一个列族family多,获取单个cell数据时就不会去扫描同一rowkey的所有数据(按列族存储),明显降低IO1、读多写少(多family反而增加写的开销,甚至带来过多的split)
2、经常是某些字段一起读(有规律的)
3、内存较为充裕
每个region的每个family对应一个store,每个store对应一个memstore
1、family不要超过3个
2、如果读少写多,反而整体上增加了IO
3、一般建议单列族,除非IO确实成为瓶颈
预建分区一定要预建分区,可以分散IO压力,同时各节点存储也是均匀的,否则一旦形成热点,不光读写受影响,甚至还要来回迁移存储的数据,造成更多的IO和网络开销(昨天说的想写入时就在几个节点上,从而不预建分区是不可行的,应该采用其他手段解决)一般场景都比较适合分散IO,起到局部降低IO的作用
合理规划hfile大小,减少split频繁的split会带来额外的开销,所以hfile的maxsize应该根据数据规模来预估,使其尽量不分裂一般场景都比较适合 
maxversion设置为1保存一个版本较少存储,可缓解IO1、不需要保存多版本且存在重复写入的场景仅能缓解IO
 高宽表结合对于随时间变化的指标数据可以采用宽表,以时间段作为列名;为避免太宽导致单条数据过大,可以高宽表结合,比如以10分钟为一个时间段,每天在单起一行记录时间线查询对于时间线查询的场景可降低IO
rowkey设计将(Long.MAX_VALUE – timestamp)加到rowkey如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为row key的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE – timestamp作为row key,这样能保证新写入的数据在读取时可以被快速命中。最近写入数据最可能被访问的场景缓解IO
读写操作使用写缓存(以字节为单位)较少写入次数 较少网络和磁盘IO
批量读写(put(list))只有一次IO开销实时性要去高,网络和IO压力较大降低IO开销
使用第三方前段缓存如果最近的数据经常会读,比如半小时内的数据,前段加上缓存,可以较少对磁盘读写可容忍部分数据差异降低IO开销
采用合理的淘汰算法甚至是TTL
redis貌似有六种淘汰策略+TTL
bulkload入库基于mr思想,直接生成Hbase底层的数据文件,不写wal,降低大量IO,几乎不影响读1、适合入库实时性要求不高的场景
2、IO很紧张
 
blockcache以额外的内存开销换取IO的下降 采用LRU淘汰
适当放宽flush门栏写数据先写入memstore,超多大小才flush到磁盘,可以把阈值适当调大,使刚写入的热数据在内存里待一会,增大缓存命中率,同时也降低了写磁盘的次数1、刚写入的数据读写最频繁
2、内存不是瓶颈
阈值不能太大,否则flush比较慢
hbase.regionserver.global.memstore.upperLimit
关闭WAL(慎用)写入时关闭WAL可以省下一笔IO开销1、允许丢少量数据的场景不到万不得已不建议使用
数据角度忙时关闭major compact,闲时打开major compact一般的业务场景都是有忙闲时的,可能在凌晨读写压力会很小,所以完全有可能把major compact放到闲时去做,以缓解忙时的IO1、业务场景有忙闲时只是缓解忙时的IO,把他转移到闲时,效果应该蛮明显
合理使用压缩算法(文件级别)gzip压缩可以降低存储需求,缓解IO压力1、cpu没有压力但IO压力很大会带来额外的CPU开销,一般推荐snappy,IO特别紧用gzip
使用PrefixTreeCompressionHBase的KeyValue存储是按照Row/Family/Qualifier/TimeStamp/Value的形式存储的,Row/Family/Qualifier这些相当于前缀,如果每一行都按照原始数据进行存储会导致占据存储空间比较大 对IO有缓解作用
使用Bloomfilter对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将结果合并返回给客户端。如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefile1、内存不是很紧张一般都建议使用Bloomfilter是一个列族(cf)级别的配置属性,如果你在表中设置了Bloomfilter,那么HBase会在生成StoreFile时包含一份bloomfilter结构的数据,称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护。所以,开启bloomfilter会有一定的存储及内存cache开销
Hbase本身使用较新的版本新版本对IO读写等各方面有优化的 不要用最新版,需要严格测试,或者参考其他公司的使用情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值