hbase优化

Hbase优化

主要优化:预分区,row key,列族,compaction(合并),批量读写,连接池

(一)表的设计
1.1预分区(pre-creating regions

预防数据倾斜,达到负载均衡

数据抽样

预估

1.2 Row key

Row key 用来检索表中的记录,支持以下3种方式:

Ø  通过单个row key访问:按照某个rowkey键值进行get操作。

Ø  通过row key的range进行scan:设置startRowKey和endRowKey,在这个范围内进行扫描

Ø  全表扫描:直接扫描整张表的所有记录

 

Row key 是按照字典序存储的。设计row key的时候,要将经常一起读取的数据存储到一块,将最近可能会被访问的数据写在一块。

举例:如果最近写入hbase的数据是最可能被访问的,可以考虑将时间戳作为row key的一部分,由于是字典序排序,row key可以是long.MAX_VALUE – timestamp作为row key,这样能保证新写入的数据在读取时可以被快速命中。

1.3列族(column  family)

不能在一张表里定义太多的列族,目前hbase并不能很好的处理超过2-3个列族的表。

1.4 In Memory

创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放到RegionServer的缓存中,保证在读取的时候被cache命中(提高查询速度)。

缓存应该放在离用户最近的地方。

1.5 MaxVersion

通过HColumnDescriptor.setMaxVersion(int MaxVersions)设置表中数据的最大版本,如果只需要保存最新版本的数据,设置为1.

1.6 Time toLive

通过HColumnDescriptior.setTimeToLive(int timeToLive)设置存储生命期,过期数据自动删除。

1.7 Compaction

 

Hbase为了防止小文件(被刷到磁盘的menstore)过多,以保证查询效率。Hbase需要在必要的时候将这些小的storefile合并为相对较大的store file,这个过程就是compaction。

Compaction主要分为两类:minorcompaction和major compaction。

 

major compaction功能:将所有storefile合并成一个,合并大量文件,应该人为控制。

触发条件:major_compact命令,majorCompact() API ,region server自动运行(hbase.hregion. majorcompaction 默认为24小时)

 

minor compaction 较为复杂,较小合并,由hbase自动触发。

由以下参数决定:                                                                                                                            

 

hbase.hstore.compaction.min: 默认值为3,只有超过3个以上的storefile时,minor compaction才会启动。

hbase.hstore.compaction.max:每次合并最多选择10个store file。

hbase.hstore.compaction.ratio:minorcompaction按照文件年龄排序,minor compaction总是从older store file开始选择。

 

(二) 写表操作
2.1 多HTable并发写

创建多个HTable客户端用于写操作,提高写数据的吞吐量

2.2 HTable参数设置
2.3 批量写

通过调用HTable.put(Put)方法可以将一个指定的row key记录写入HBase,同样HBase提供了另一个方法:通过调用HTable.put(List<Put>)方法可以将指定的row key列表,批量写入多行记录,这样做的好处是批量执行,只需要一次网络I/O开销,这对于对数据实时性要求高,网络传输RTT高的情景下可能带来明显的性能提升。

2.4 多线程并发写
(三) 读表操作
3.1 多HTable并发读
3.2 HTable参数设置
3.3 批量读

通过调用HTable.get(Get)方法可以根据一个指定的row key获取一行记录,同样HBase提供了另一个方法:通过调用HTable.get(List)方法可以根据一个指定的row key列表,批量获取多行记录,这样做的好处是批量执行,只需要一次网络I/O开销,这对于对数据实时性要求高而且网络传输RTT高的情景下可能带来明显的性能提升

3.4 多线程并发读

连接池:已经被替换为HConnection

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值