HBase优化
Posted chenshaowei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase优化相关的知识,希望对你有一定的参考价值。
高可用
在HBase中HMaster负责监控HRegionServer的生命周期,均衡RegionServer的负载,如果HMaster挂掉了,整个HBase集群就出问题了,所以HBase支持对HMaster的高可用配置。
高可用配置是为了解决主从架构的单点失效故障问题。所以要对Master进行一个热备。
如何配置,到时候自己搜索一下。
预分区
每一个Region都维护着StartRow到EndRow之间的数据,如果加入的数据符合某个Region维护的RowKey范围,则该数据交给这个Region。依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高HBase性能。
使用JavaAPI创建预分区
//自定义算法,产生一系列 hash 散列值存储在二维数组中
byte[][] splitKeys = 某个散列值函数
//创建 HbaseAdmin 实例
HBaseAdmin hAdmin = new HBaseAdmin(HbaseConfiguration.create());
//创建 HTableDescriptor 实例
HTableDescriptor tableDesc = new HTableDescriptor(tableName);
//通过 HTableDescriptor 实例和散列值二维数组创建带有预分区的 Hbase 表
hAdmin.createTable(tableDesc, splitKeys);
RowKey设计
数据存储在哪个分区,取决于RowKey处于哪个预分区的区间内,设计RowKey的主要目的,就是让数据均匀的分布于所有的region中,在一定程度上防止数据倾斜。
生成随机数、hash、散列值
将原先的RowKey哈希成随机数,以均分分布,防止数据倾斜
字符串反转
2020变成0202,一定程度上,也是生成一个随机数,用于均匀分布
字符串拼接
将要排列的数据加入RowKey
内存优化
HBase操作过程中需要大量的内存开销,一般会分配整个可用内存的70%给HBase的Java堆。
基础优化
- 允许在HDFS的文件中追加内容,开启append
- 优化DataNode允许的最大文件打开数,HBase一般会同一时间操作大量文件
- 优化延迟高的数据操作的等待时间
- 优化数据的写入效率,提高文件的写入效率,减少写入时间
- 设置RPC监听数量
- 优化HStore大小
- 优化HBase客户端缓存,增大该值可以减少RPC调用次数,会消耗更多内存
- 指定scan扫描HBase获取的行数
- flush、compact、split机制
当MemStore达到阈值,将数据Flush进StoreFile,compact机制把小文件合并成大文件,split则是当Region达到阈值,一分为二
以上是关于HBase优化的主要内容,如果未能解决你的问题,请参考以下文章
使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化