典型业务场景下的CloudTable性能调优方法

举报
姚明爱投三分球 发表于 2018/03/23 15:45:41 2018/03/23
【摘要】 不同的业务场景下,往往需要针对具体业务场景对系统进行性能调优,以获得最佳性能。CloudTable提供了丰富的可配置参数接口,可以方便用户根据自身的业务特征来进行性能优化。以下针对随机读密集型、顺序读密集型、写密集型三种典型的业务场景,给出优化思路和方法。1.随机读密集型思路:对于随机读密集型的工作负载,可以主要从如下2点思考进行优化:(1)高效利用缓存(2)更好地索引配置参数介绍建议hfi...

不同的业务场景下,往往需要针对具体业务场景对系统进行性能调优,以获得最佳性能。CloudTable提供了丰富的可配置参数接口,可以方便用户根据自身的业务特征来进行性能优化。

以下针对随机读密集型、顺序读密集型、写密集型三种典型的业务场景,给出优化思路和方法。

1.随机读密集型

思路:对于随机读密集型的工作负载,可以主要从如下2点思考进行优化:(1)高效利用缓存(2)更好地索引

配置参数

介绍

建议

hfile.block.cache.size

块缓存是读缓存(LRU)。该属性定义块缓存可以使用的堆的最大百分比

对于随机读密集型负载,增加缓存使用的堆的百分比

hbase.regionserver.global.memstore.lowerLimit

hbase.regionserver.global.memstore.upperLimit

这两个参数可以限定MemStore可以使用的堆的最大百分比

对于随机读密集型负载,想通过增加块缓存占用堆的百分比(hfile.block.cache.size)来提升读性能时,需要同步使用这2个参数来减少MemStore占用的百分比

HFile数据块大小

HFile数据块大小可以在创建表的时候,通过BLOCKSIZE属性来指定。

默认情况下,HFile Block size64KB,通常来说,该值较为合理。但在随机读密集型负载下,可以尝试将该值减小,通过减少IO交互来提升随机读性能。

布隆过滤器

布隆过滤器可以通过在创建表的时候,通过BLOOMFILTER属性来指定。

打开布隆过滤器可以减少为查找指定行的Key Value对象而读取的HFile数量。当值支持多种类型的布隆过滤器

激进缓存

可以在创建表的时候,通过IN_MEMORy属性来指定。该参数可以在列族层次设置,以便该列族比其他列族更加激进的进行缓存。

该设置可以尽可能多的缓存数据,以此来提升读性能。合理的选择开启激进缓存的列族是性能调优的关键。

关闭其他表和列族的缓存

可以在列族层次设置,在读的时候不在BlockCache中进行缓存。通过创表中的BLOCKCACHE属性设置

如果有一些列族被用于随机读而其他的列族没有被用到,没有被用到的列族可能会污染缓存。关闭它们的缓存会提升你的缓存命中率




 

2.顺序读密集型

思路:对于顺序读密集型的工作负责,读缓存不会带来太多好处,甚至有可能使用缓存比不使用缓存需要更频繁的访问硬盘。

针对顺序度密集型的负载,可以考虑通过增加每次访问硬盘时的预读数据量来提高性能。

配置参数

介绍

建议

HFile数据块大小

HFile数据块大小可以在创建表的时候,通过BLOCKSIZE属性来指定。

数据块越大,每次访问硬盘可以获取的数据就越多,在顺序读场景下,可以有效提升性能

hbase.client.scanner.caching

该参数定义了扫描器上调用next方法时取回的行的数量。

该数值越高,扫描操作时客户端需要向RegionServer发起的RPC调用越少,性能也就越高。代价是,该数字越高,客户端使用的内存越多。

通过Scan.setCacheBlocks()API关闭数据块的缓存

该参数定义被扫描的数据块是否应该放进块缓存

扫描通常带来顺序读,在顺序读场景下,缓存不仅起不到正面作用,反而会因为连续的换入换出影响性能。因此对于大规模扫描操作,通过将该参数置为false来将数据块的cache关闭是一个好选择。

关闭表缓存

可以在设置列族时指定

同上

 

3.写密集型

思路:因为在flush、Compaction、split过程中,会带来大量的读写IO,影响性能。所以,在写密集型业务下,可以通过避免频繁的flush,compaction,split来提升性能。

配置参数

介绍

建议

hbase.hregion.max.filesize

该参数定义了region对应的存储文件的最大大小。如果列族的存储文件超过这个大小,那么该region被拆分。

region越大意味着在写入时拆分越少。在写密集场景下,可以尝试调高该参数来提升性能。

为表提前做的预分区

在创建表时,可以指定为表做提前预分区

通过提前做预分区,来避免写入过程中region分裂来影响性能。

hbase.hregion.memstore.flush.size

该参数定义了memstore的大小,当memstore超过这个值时,则会被flush到硬盘中。一个周期性运行的线程会检查memstore的大小

通过调大该参数,可以减少生成的hfile数量,进而减少compaction次数。







hbase.hstore.blockingWaitTime

当到达Hfile的数量限制时(由hbase.hstore.blockingStoreFiles参数指定),阻塞hregion更新数据的时间。

调小该参数值,可以减小阻塞时间

hbase.hstore.blockingStoreFiles

阻塞写入的最大Hfile数量值

调大该参数值,可以降低或避免因hfile数量过多导致的阻塞(在写密集业务下,hfile数量会增长较快)

hbase.hstore.compaction.min

可以运行compaction的符合条件的最少hfile数量

调大该值,可以减少hfilecompaction的总次数,进而减少Compaction操作处理的总数据量。

hbase.hstore.compaction.max

一次minor compaction所能选择的最大hfile数量

调大该值,可以减少hfilecompaction的总次数,进而减少Compaction操作处理的总数据量。

hbase.hstore.compaction.max.size

超过该值得hfile将不会被选中做compaction

大文件做compaction的性价比很低,通过适当调小该值,可以让较大的文件,避免被选中做compaction,减少IO占用。

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。