1 配置块大小(Configurableblock size)
HFile文件块大小能够通过column family级别进行配置,这个块与我们所熟知的HDFS块是不同的。HFile块的默认大小是64KB,并且快索引存储着每个HFile文件的开始关键字。配置块文件的大小将影响到块索引文件的大小。块越小,索引文件就越大,因此会产生更大的内存消耗。
初始化HFile块大小命令:
hbase(main):002:0>create ‘mytable‘, {NAME =>‘colfam1‘, BLOCKSIZE => ‘65536‘}
2 块缓存(Block cache)
经常会出现这种情况,花费一定工作量将数据放到缓存中,结果没有得到任何好处。比如,序列地扫描一个能够访问或者不是经常访问的表或者这个表的column family时,你不会关心是否Get或者Scan会花费稍微长的时间来做这个事。这种情况下,你可以在column family级别上选择关闭块缓存。再假如你需要做许多的序列扫描,你会制造出许多缓存和破坏原本可以通过块缓存获得好处的数据。这样的话,关闭块缓存可以避免上述情况的发生,也为其它表或者表column family让出有效缓存空间。
默认情况下,块缓存是打开的,关闭脚本如下所示:
hbase(main):002:0>create ‘mytable‘, {NAME =>‘colfam1‘, BLOCKCACHE => ‘false’}
3 积极缓存(Aggressive caching)
在块缓存中,你可以选择设置column family块缓存有更高的优先级(LRC 缓存)。默认情况下,设置变量IN_MEMORY的值是false。即使你设置了为true,在实际的应用中可以不回奏效,其原因是因为它不能够保证HBase将这个块缓存中的column family比其它的columnfamily表现更加积极。
hbase(main):002:0> create ‘mytable‘, {NAME => ‘colfam1‘, IN_MEMORY=> ‘true‘}
4 Bloom过滤(Bloom Filter)
blooom过滤器能够使你对每个存储在块中的数据应用一个负向的测试。当对一个特殊行发出请求时,bloom过滤器检测着查看是否这个块中有这一行记录。
bloom过滤器作出结论地说,没有这样的行记录或者说它不知道。那就是一个为什么我们说它是一个负向测试的原因。bloom过滤器也能够应用到一个行记录的单元记录中。当访问一个具体的列修饰符(column qualifier)时,相同的负向测试会实施。
bloom过滤器需要存储这个额外的索引层而花费更多的存储空间。bloom过滤会随着它们建立索引的大小而不断增长,这就是一个行级别的bloom过滤器。
它比一个修饰符级别的bloom过滤器所占的空间要少一些。当存储空间不是问题,你可以打开column family上的bloom过滤器。命令如下:
hbase(main):007:0>create ‘mytable‘, {NAME =>‘colfam1‘, BLOOMFILTER => ‘ROWCOL‘}
默认情况下,bloom过滤器参数是NONE,一个行级别bloom过滤器是使用ROW里打开的,而修饰符级别(qualifier-level)的bloom过滤器则是使用ROWCOL。
ROWCOL级别的存储空间要不ROW级别的bloom过滤器要高很多。
5 存在时间(Time To Live,TTL)
列家族(ColumnFamilies )能够以秒钟来设置存在的时间,HBase能够制动地删除这些已经到期的行记录。这个功能能够应用到一个行记录的所有版本上,甚至是当前这个版本。行记录的TTL编码是以一种指定的UTC。默认的情况下,TTL的时间设置是INT.MAX_VALUE(2147483647),你可以按照你的需求来设置这个参数值。
hbase(main):002:0> create ‘mytable‘,{NAME => ‘colfam1‘, TTL => ‘18000‘}
这个设置意味着,数据在colfaml的时间超过5小时会在接下来的主要压缩过程中被删除掉。
6 压缩(Compression)
HFile能够被压缩存储在HDFS文件系统中。当读写数据时,这个能够帮助节省磁盘的I/O,避免花费更高的CUP消耗来压缩和解压缩数据。压缩作为表结构定义的一部分。在你知道压缩不能够给你带来什么性能上的好处时,你可以关闭这个压缩功能。
HBase能够使用不同的压缩编码格式,包括LZO,Snappy, 和 GZIP. LZO6 和Snappy。由于各种原因,比较流行的使用格式Snappy,命令如下:
hbase(main):002:0> create ‘mytable‘, {NAME => ‘colfam1‘, COMPRESSION=> ‘SNAPPY‘}
7 单元格版本(Cell version)
默认情况下,HBase维持每个单元格有三个版本,这个属性是可以配置的。修改命令如下:
hbase(main):002:0> create ‘mytable‘, {NAME=> ‘colfam1‘, VERSIONS => 1}