HBase优化

高可用

保证HMaster存在
1.在hbase/conf目录下创建backup-masters文件

touch conf/backup-masters

2.在backup-masters文件中配置高可用的HMaster节点

echo hostname > conf/backup-masters

3.将整个conf目录传输到其他节点

预分区

每一个region维护着StartRow与EndRow,如果加入的数据符合某个Region维护的RowKey范围,则该数据交给这个Region维护。因此,可以将数据所要投放的分区提前大致的规划好,以提高HBase性能。

1.手动设置

create 'tablename','ColumnFamily1','ColumnFamily2',...,SPLITS => ['1000','2000','3000','4000']

2.生成16进制序列预分区

create 'tablename','ColumnFamily1','ColumnFamily2',...,{NUMRGIONS => 15,SPLITALGO => 'HexStringSplit'}

3.按照恩建中设置的规则预分区
创建splits.txt:
aaa bbb ccc ddd

create 'tablename','ColumnFamily1','ColumnFamily2',...,SPLITS_FILE => 'splits.txt'

4.使用javaAPI预分区

RowKey设计

目的是让数据均匀分布在所有的region中,在一定程度上防止数据倾斜
1.生成随机数、hash、散列值
2.字符串反转
3.字符串拼接

内存优化

一般会分配可用内存的70%给HBase的java堆,但是不建议分配非常大的堆内存,因为gc过程会持续太久导致RegionServer处于长期不可用状态,一般16-48G,如果因框架占用内存过高导致系统内存不足,框架运行速度一样会十分慢

基础优化

1.允许在hdfs的文件追加内容

hdfs-site.xml,hbase-site.xml
dfs.support.append  #默认值为true

2.优化DataNode允许的最大文件打开数

hdfs-site.xml
dfs.datanode.max.transfer.threads #默认值为4096

3.优化延迟高的数据操作的等待时间

hdfs-site.xml
dfs.image.transfer.timeout #默认值60000ms

4.优化数据的写入效率

mapred-site.xml
mapreduce.map.output.compress
mapreduce.map.output.compress.codec

5.设置RPC监听数量

hbase-site.xml
Hbase.regionserver.handler.count  #默认值 30

6.优化HStore文件大小

hbase-site.xml
Hbase.hregion.max.filesize #默认值10737418240(10GB)

7.优化Hbase客户端缓存

hbase-site.xml
hbase.client.write.buffer #增大该值可以减少RPC调用次数,但是会消耗更多内存

8.指定scan.next扫描Hbase所获取的行数

hbase-site.xml
hbase.client.scanner.caching

9.flush、compact、split机制

posted @ 2020-05-09 01:21  Q1Zhen  阅读(94)  评论(0编辑  收藏  举报