高可用
保证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机制