建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

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

确定
我再想想
选择版块
1035213fnlks2fx6defuh6.jpg 云搜索服务CSS 钜惠专场 2020年华为云AI实战营 华为云普惠AI

姚明爱投三分球

发帖: 2粉丝: 0

级别 : 新手上路

发消息 + 关注

发表于2018-3-26 09:27:13 15389 1
直达本楼层的链接
楼主
显示全部楼层
[技术分享] 典型业务场景下的CloudTable性能调优方法

不同的业务场景下,往往需要针对具体业务场景对系统进行性能调优,以获得最佳性能。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 size是64KB,通常来说,该值较为合理。但在随机读密集型负载下,可以尝试将该值减小,通过减少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数量
调大该值,可以减少hfile被compaction的总次数,进而减少Compaction操作处理的总数据量。
hbase.hstore.compaction.max
一次minor compaction所能选择的最大hfile数量
调大该值,可以减少hfile被compaction的总次数,进而减少Compaction操作处理的总数据量。
hbase.hstore.compaction.max.size
超过该值得hfile将不会被选中做compaction
大文件做compaction的性价比很低,通过适当调小该值,可以让较大的文件,避免被选中做compaction,减少IO占用。
举报
分享

分享文章到朋友圈

分享文章到微博

建赟

发帖: 442粉丝: 28

级别 : 外部版主

发消息 + 关注

发表于2018-4-4 00:03:13
直达本楼层的链接
沙发
显示全部楼层

感谢分享

点赞1 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册