【Hadoop/Hbase】Hbase优化性能配置

Hbase性能提升,通过读取官网文档和收集各种提升性能的经验,现在总结如下。部分已经通过测试,部分只是暂时总结过来。

1:通过使用HTablePool,通过池获取HTable连接。其实这和MySQL的连接池的思想是一样的,主要是每次请求的时候节省获取HTable连接所带来的时间消耗。但是注意当不再使用连接的时候注意释放连接,原来是通过使用方法HTablePool.putTable(),把连接释放会连接池中。但是后来这个方法被废弃,改为使用HTablePool.closeTablePool()。已验证

2:设计压缩方式:io.compression.codecs。我的虚拟机只支持gz压缩。已验证

3:setWriteBufferSize(size)、setAutoFlush(false)避免每次put发一次请求读写数据,一直到buffer达到要求才主动进行flush。注意setWriteBufferSize会消耗客户端的内存,所以对大小设定要注意。除此之外,因为这些数据是缓冲在客户端的内存中的,在Hbase的server端是没有这些数据的,所以当客户端发生宕机事故,则这些数据就会彻底丢失无法恢复回来。所以,客户端缓存的大小和时间长度都是需要协商的。已验证

4:如果region过少,可以提前创建几个region。正在准备测试

5:通过并发访问,待代码实现

6:对split的设计。对hbase来说,主要的存储单元是hregion,而hbase对hregion的操作主要是两种:split与compact。split是一个hregion过大的时候,把一个hregion分割成两个hregion。compact是对于一个hregion中多个小的store的时候进行压缩,把几个小的store压缩成一个大的store,而能激发compact操作的事件主要有三种,一种设定的压缩时间到了,另一种是手动调用,而最后一种是store的个数超过了设定的一个hregion可存在的个数;而压缩方式又分为两种,一个是minor,一个是major。compact是无法避免的,所以可以避免的就是split操作。能避免split操作的就是把一个hregion设定的足够大,以避免split。

7:可以修改底层hdfs的block 的大小。一般底层hdfs的默认大小是64M,有时候调整block大小在一定程度上会对性能产生提升,但是这要对使用场景个性化分析

你可能感兴趣的:(hadoop,性能,hbase)