hbase数据读取优化_HBase读写性能优化

一个系统上线之后,开发和调优将会一直伴随在系统的整个生命周期中,HBase也不例外。下面我们要学习如何进行HBase读写性能调优,以获取最大的读写效率。

HBase写入优化

客户端优化

批量写

采用批量写,可以减少客户端到RegionServer之间的RPC的次数,提高写入性能。批量写请求要么全部成功返回,要么抛出异常。

HTable.put(List<Put>);

异步批量提交

如果业务可以接受异常情况下丢失少量数据,可以使用异步批量提交方式提交请求。

用户提交写请求之后,数据会先写入客户端缓存,并返回用户写入成功(此时数据并为提交到RegionServer),当客户端缓存达到阈值(默认2M,可通过hbase.client.write.buffer配置)时才会批量提交给RegionServer。需要注意的是,在某些情况下客户端异常的情况下缓存数据有可能丢失。

HTable.setWriteBufferSize(writeBufferSize); // 设置缓存大小

HTable.setAutoFlush(false);

多线程并发写

客户端开启多个HTable写线程,每个写线程负责一个HTable对象的flush操作,这样结合定时flush和写buffer,可以即保证在数据量小的时候,数据可以在较短时间内被flush,同时又保证在数据量大的时候,写buffer一满就即使进行flush。

使用BulkLoad写入

在HBase中数据都是以HFile形式保存在HDFS中的,当有大量数据需要写入到HBase的时候,可以采用BulkLoad方式完成。

使用MapReduce或者Spark直接生成HFile格式的数据文件,然后再通过RegionServer将HFile数据文件移动到相应的Region上去。

写数据表设计调优

COMPRESSION

配置数据的压缩算法,这里的压缩是HFile中block级别的压缩。对于可以压缩的数据,配置压缩算法可以有效减少磁盘的IO,从而达到提高性能的目的。但是并不是所有数据都可以进行有效压缩,如图片,因为图片一般是已经压缩后的数据,所以压缩效果有限。常用的压缩算法是SNAPPY,因为它有较好的压缩和解压速度和可以接受的压缩率。

IN_MEMORY

配置表的数据优先缓存在内存中,这样可以有效提升读取的性能。适合小表,而且需要频繁进行读取操作的。

预分区

在HBase中数据是分布在各个Region中的,每个Region都负责一个起始RowKey和结束Rowkey的范围,在向HBase中写数据的时候,会根据RowKey请求到对应的Region上,如果写请求都集中在某一个Region或某几个Region上的时候,性能肯定不如写请求均匀分布在各个Region上好。默认情况下,创建的HBase的只有一个Region分区,会随着数据量的变大ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值