Hbase客户端读写性能优化

文章探讨了Hbase在写多读少场景下的性能优化,包括客户端Scan时调整数据获取数量以减少RegionServer通信次数,考虑禁用服务端缓存以避免影响其他应用的读延迟,以及指定列簇或列进行查找以优化IO。对于写性能,提出了使用批量异步提交Put操作,以及权衡WAL同步策略(如SYNC_WAL)以平衡性能和数据安全性。
摘要由CSDN通过智能技术生成

背景

Hbase是一个写多读少应用场景的Kv数据库,自然Hbase的读写性能使我们非常关注的,本文就简单记录下影响客户端读写性能的一些注意事项

客户端读性能优化

1.客户端scan的时候数据量很大时其实需要和RegionServer进行多次通信,为了减少和RegionServer通信的次数,可以设置每次和RegionServer通信时获取的记录的数量,默认为100,比如可以设置为200或者更多,此外,如果是scan获取大量的数据,比如几十万甚至几百万,那么需要考虑是否禁用服务端缓存,也就是这些扫描出来的数据是否放置到服务端的BlockCache中,如果把这些数据都放在服务端的BlockCache的话,会挤掉真正热点的数据,造成服务端其他应用的读延迟.
2.指定列簇或者列进行查找操作,由于Hbase是根据列簇进行目录存放数据的,如果不指定列簇进行查找,hbase会返回这个rowkey对应的所有列簇的数据,如果有多个列簇时,相当于IO会扩大几倍,所以客户端查询时最好精确指定到列簇或者列的维度.

客户端写性能优化

1.Put操作使用批量异步提交模式,也就是如果可以容许少量的记录丢失,我们可以使用异步批量提交的模式,也就是先把记录提交到客户端本地内存中,等达到一定阈值比如2M之后再把这些记录提交到RegionServer服务器中,这样可以提高吞吐和降低延迟
2.Put操作是否需要WAL同步落盘操作,我们对hbase的一次更新操作对应的Hbase那里就是一次WAL日志写入HLog + 写MemStore本地内存,此处影响最大的是WAL记录如何写入HLog,因为这涉及到文件IO,而且这里涉及到HDFS的三个副本的文件IO操作,对写性能影响很大,这里Hbase提供几种WAL同步写入HLog的方式,一种是SKIP_WAL,直接不把变更日志写到HLog中,这种方式对写入性能最好,然而宕机时会造成大量的记录丢失。第二种是ASYNC_WAL,采用这种方式,hbase会使用异步线程把更新日志写到Hlog中,但是只是写入到Hdfs的操作系统缓存中,不保证数据落盘到Hlog文件. 第三种是SYNC_WAL,这种方式会同步将变更记录写入到HLog中,但是数据只是写入到Hdfs操作系统的缓存中,不保证落盘,比异步写入的优势在于异步写入是如果RS宕机,会丢失数据,而同步写入时RS宕机不会丢失数据,只有HDFS的DN节点宕机才会丢失数据
第四种FSYNC_WAL,采用这种方式变更记录会同步写入Hdfs中,并且强制使用fsync命令同步数据到DameNode的本地磁盘,严格保证数据不会丢失,然而性能较差,所以如果可以容许记录的少量丢失,采用Sync_WAL是一个比较好兼容了性能和数据安全性的方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值