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堆。

基础优化

  1. 允许在HDFS的文件中追加内容,开启append
  2. 优化DataNode允许的最大文件打开数,HBase一般会同一时间操作大量文件
  3. 优化延迟高的数据操作的等待时间
  4. 优化数据的写入效率,提高文件的写入效率,减少写入时间
  5. 设置RPC监听数量
  6. 优化HStore大小
  7. 优化HBase客户端缓存,增大该值可以减少RPC调用次数,会消耗更多内存
  8. 指定scan扫描HBase获取的行数
  9. flush、compact、split机制

当MemStore达到阈值,将数据Flush进StoreFile,compact机制把小文件合并成大文件,split则是当Region达到阈值,一分为二

posted @ 2020-03-14 19:02  Tanglement  阅读(138)  评论(0编辑  收藏  举报