Phoenix表和索引分区优化方法

优化方法

原文地址:Phoenix基本优化方法

1. SALT_BUCKETS

HBASE建表之初默认一个region,当写入数据超过region分裂阈值时才会触发region分裂。我们可以通过SALT_BUCKETS方法加盐,在表构建之初就对表进行预分区。SALT_BUCKETS值的范围是1~256(2的8次方),一般将预分区的数量设置为0.5~1 倍核心数。
加盐的原理是在原始的rowkey前加上一个byte,并填充由rowkey计算得出的hash值,使得原本连续的rowkeys被均匀打散到多个region中,有效地解决了读写热点问题。较多的region同时也增加了表读写并行度,从而提升了HBase表的读写效率。

#表指定分区数
CREATE TABLE test_salt
 (
  hrid         varchar not null primary key,
  parentid     bigint,
  departmentid varchar
 )SALT_BUCKETS=40;

#索引指定分区数
(索引不指定预分区数时,其默认分区数与表保持一致)
CREATE INDEX idx_test_salt_departmentid ON TESTN(departmentid) SALT_BUCKETS=20;

加盐原理图解

在这里插入图片描述

RowKey SALT_BUCKETS 分区

CREATE TABLE SALT_TABLES (a_key VARCHAR PRIMARY KEY, a_col VARCHAR) SALT_BUCKETS = 20;

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. Pre-split

除了使用加盐直接指定分区数外,我们也可以使用split on手动设置分区。这种方法同样是在构建之初就对表进行预分区,较多的region能够增加hbase的并行度,从而提升读取、写入效率。由于对rowkey不引入额外的byte,因此不会改变rowkey的原始顺序。

#对表指定五个分区
CREATE TABLE test_split
 (
  hrid         varchar,
  parentid     bigint,
  departmentid varchar
CONSTRAINT my_pk PRIMARY KEY (departmentid, hrid))
SPLIT ON ('market','device','develop','sale');

RowKey分区

   Pre-split 这个就是HBase的预分区了,在建phoenix表时,可以精确的指定要根据什么值来做预分区 示例:
   CREATE TABLE YUHUIREG (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SPLIT ON ('CS','EU','NA');

在这里插入图片描述

3. 分列族

由于HBase表的不同列族是分开存储,因此把相关性大的列放在同一个列族,能够减少数据检索时扫描的数据量,从而提升读的效率。

#对列指定a、b两个列族
CREATE TABLE test_cf
 (
  a.hrid         varchar not null primary key,
  a.parentid     bigint,
  b.departmentid varchar
 );

4. 使用压缩

在数据量大的表上可以使用压缩算法来减少存储占用空间,从而提高性能 。常用的压缩方法有GZ,lzo等。

#对表实施GZ压缩
CREATE TABLE test_compress
 (
  hrid         varchar not null primary key,
  parentid     bigint,
  departmentid varchar
 )COMPRESSION='GZ'

5. 二级索引

以Phoenix的全局索引为例,对departmentid建立全局索引,实际上是建立了一张索引表,索引表的rowkey由departmentid与原表rowkey拼接而来。由于departmentid是索引表rowkey的主维度,因此能够快速被查找并获取到对应的原表rowkey,再通过原表rowkey可以从原表中快速获取数据。

#建表
CREATE TABLE test_index
 (
  hrid         varchar not null primary key,
  parentid     bigint,
  departmentid varchar
 );

#对departmentid建立全局索引
CREATE INDEX idx_test_index_departmentid ON test_index(departmentid);

6.参数优化

根据集群配置情况设置合理参数有助于优化HBase性能,可以在hbase-site.xml里配置以下参数

1. index.builder.threads.max (Default: 10)
   为主表更新操作建立索引的最大线程数

2. index.writer.threads.max(Default: 10)
   将索引写入索引表的最大线程数

3. hbase.htable.threads.max(Default: 2,147,483,647)
   索引表写入数据的最大线程数

4. index.tablefactory.cache.size(Default: 10)
   缓存10个往索引表写数据的线程

5. index.builder.threads.keepalivetime(Default: 60)
   为主表更新操作建立索引的线程的超时时间

6. index.writer.threads.keepalivetime(Default: 60)
   将索引写入索引表的线程的超时时间

7. hbase.htable.threads.keepalivetime(Default: 60)
   索引表写入数据的线程的超时时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值