1.查询优化
1.设置Scan缓存
设置查询缓存,定义一次交互从服务器端传输到客户端的行数,有效减少服务器端和客户端的交互(默认100行)
scanner.setCaching(1000)
2.在查询的时候显示指定列
在定义查询的时候,指定某列,或者几列,能有效的减少网络传输量,在一定程度上提升查询性能
scanner.addColumn(Bytes.toBytes(family),Bytes.toBytes(column))
3.禁用块缓存
scan扫描全表的时候会使用块缓存,Mapreduce读取全表的时候,需要将该值设置为false,默认是true,全表扫描,每条记录只会读取一次,使用块缓存会降低效率。
2 写入优化
1.关闭预写日志
风险,如果regionServer宕机,数据无法恢复。
put.setWruteToWAL(false)
2.设置AutoFlush
Htable有这个属性,该属性用于支持客户端的批量更新,默认是true,客户端每接受到一条数据,立即发送服务端,如果设置该属性为false,当客户端提交put请求的时候,将该请求在 客户端缓存,直到数据达到某个阈值的容量时(hbase.client.write.buffer)或者执行hbase.flushcommits()时,才向regionserver提交请求。
size=12*1024*1024
table.setAutoFlush(false)
table.setWiteBufferSize(size)
table.flushCommits
3.预创建Region
在hbase创建表时候,默认只有一个region,插入该表的数据会保存在该region中,为了解决问题,可以预习region,有两种方法
第一种使用regionsPlitter
hbase org.apache.hadoop.hbase.util.RegionSplitter test2 HexStringSplit -c 10 -f cf1
HexStringSplit 划分的算法 -c 10 预创建10个分区 -f cf1 创建一个名字为 cf1的列族