您的位置:首页 > 其它

HBase性能调优之模式设计

2015-11-25 09:55 429 查看
可以转载,请注明: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+column
Bloom 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中设置,如下:

[code]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 Cache
in-memory
blocks拥有最高优先级,但不保证整个表都被放入内存。参见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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: