HBase性能调优之模式设计
2015-11-25 09:55
429 查看
可以转载,请注明:http://blog.csdn.net/oozie123。
对HBase而言,Bloom Filter过滤器提供了轻量级的内存模型,去减少磁盘的读,当给定一个
Bloom Filter过滤器本身储存在HFile的元数据中,它们不需要更新,当一个部署在RegionServer上region时,HFile是打开的,这时Bloom Filter过滤器会被加载至内存。
HBase包含了很多有关Bloom Filter过滤器的调优参数,如调整块大小,提高命中率等。
从HBase 0.96开始,Bloom Filter过滤器被默认开启,基于
更多有关HBase的Bloom Filter过滤器,参见Bloom Filters,相关讨论参见How are bloom filters used in HBase?。
为了确定Bloom Filters是否有积极的影响,查看
可以选择基于
当数据被储存在几个大的StoreFiles,低速的scans去查找特定的行时,会避免额外的磁盘IO。
Bloom Filter在执行删除操作时需要重建,所以不要产生大量的删除操作。
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中设置,如下:
[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-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。
相关文章推荐
- Windows下Agent开发简介
- 苹果审核reject理由大全(14):兑换码 兑换码 兑换码
- ios获取设备型号
- Windows nexus 服务启动失败
- MyBatis 入门到精通(一) 了解MyBatis获取SqlSession
- Tvos模拟器遥控的快捷键
- SDUT 2444正方形的判断
- 如何把手机号的中间四位变成'****'
- C语言第三天
- day04笔记
- day05笔记
- day06笔记
- day07-C++时间函数local的运用
- C++之day07:参数初始化表(构造函数加冒号)girl.cpp
- C++-day07-指向对象的指针-student.cpp
- C++-day07-算法,求1000内素数
- mysql命令
- 通过包名和类名启动activity
- 苹果公司开发者账号注册流程详解
- C++的一个split小程序以及csv读取方式