HBase性能调优之模式设计

可以转载,请注明:http://blog.csdn.net/oozie123

1 Number of Column Families

目前还不能在两个及以上Column Families上运行良好,建议1个,参考On the number of column families

2 Key and Attribute Lengths

尽可能短,另外使用压缩,参见Try to minimize row and column sizes

3 Table RegionSize

每个表的regionsize可以被设置通过HTableDescriptor,它会覆盖默认配置文件中的设置,具体怎么设置,参考前面一篇文章:容量规划和Region配置

4 Bloom Filters

Bloom Filter过滤器作为一种数据结构,它别设计为预测一个给定的元素是否属于一组元素集合。从Bloom Filter过滤器返回的数据不一定是完全准确的,它主要应用于大数据集(大到hash机制无法容忍),并能提供足够准的返回结果。更多Bloom Filter过滤器相关信息,参加http://en.wikipedia.org/wiki/Bloom_filter

对HBase而言,Bloom Filter过滤器提供了轻量级的内存模型,去减少磁盘的读,当给定一个Get操作(Bloom Filter对scans无效),它只会去查找相关行的StoreFiles,并行的读性更能提升不少。

Bloom Filter过滤器本身储存在HFile的元数据中,它们不需要更新,当一个部署在RegionServer上region时,HFile是打开的,这时Bloom Filter过滤器会被加载至内存。

HBase包含了很多有关Bloom Filter过滤器的调优参数,如调整块大小,提高命中率等。

从HBase 0.96开始,Bloom Filter过滤器被默认开启,基于row-based
更多有关HBase的Bloom Filter过滤器,参见Bloom Filters,相关讨论参见How are bloom filters used in HBase?

4.1 什么时候运用Bloom Filters

从HBase 0.96开始,基于row-based的Bloom Filter被默认使用,根据数据特征和如何加载至HBase,你也可以更改为基于row+column的Bloom Filter。

为了确定Bloom Filters是否有积极的影响,查看RegionServer metrics选项上的blockCacheHitRatio值是否有所提升。如果Bloom Filters开启了,blockCacheHitRatio值应该是会提升的,因为Bloom Filters过滤了不需要的blocks。

可以选择基于row+column的Bloom Filter,但是如果是scan所有的行,这种选择没任何益处。当有大量的column-level Puts,这样一行可能位于任何StoreFile,基于row-based的Bloom Filter不是很奏效,基于row+columnBloom Filter是不错的选择,排除一行只有一个column,那么Bloom Filter需要更多空间储存keys。当一个数据实体的大小至少千字节时,Bloom Filter会相当奏效。

当数据被储存在几个大的StoreFiles,低速的scans去查找特定的行时,会避免额外的磁盘IO。

Bloom Filter在执行删除操作时需要重建,所以不要产生大量的删除操作。

4.2 使能Bloom Filters

Bloom Filters基于Column Family使能,可以使用HBase API中HColumnDescriptor设置,也可以在hbase shell中设置,如下:

hbase> create 'mytable',{NAME => 'colfam1', BLOOMFILTER => 'ROWCOL'}

4.3 在服务器端配置Bloom Filters

  • io.hfile.bloom.enabled:是否开启bloom filters
  • io.hfile.bloom.error.rate:失败率
  • io.hfile.bloom.max.fold :不用修改
  • io.storefile.bloom.max.keys:single-block,最大keys
  • io.storefile.delete.family.bloom.enabled:使能删除Family Bloom filters
  • io.storefile.bloom.block.size:Bloom block size
  • hfile.block.bloom.cacheonwrite:使能cache-on-write

5 ColumnFamily BlockSize

表的每个ColumnFamily都可以设置blocksize,默认是64K,大的cell values需要大的blocksizes,blocksizes与StoreFile indexes是反相关的。更多参见HColumnDescriptor

6 In-Memory ColumnFamilies

ColumnFamilies可以被设置为in-memory,在Block Cachein-memoryblocks拥有最高优先级,但不保证整个表都被放入内存。参见HColumnDescriptor

7 Compression

生产环境一般都会在ColumnFamily上定义压缩,参考 Compression and Data Block Encoding In HBase.

7.1 However…​

当数据在in-memory(如在MemStore)或者正在写(在RegionServer和Client之间传输),它是不会被压缩的。更多参考Try to minimize row and column sizes

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值