当前位置: > > > HBase - 列族参数高级设置教程(生存时间、版本数、压缩、块大小、块缓存、布隆过滤器)

HBase - 列族参数高级设置教程(生存时间、版本数、压缩、块大小、块缓存、布隆过滤器)

1,生存时间(TTL)设置

(1)应用系统经常需要从数据库里删除老数据,通过配置列族 TTL 参数,可使数据增加生命周期。这样,当数据超过该配置时间,将会在大合并时“被删除”。(单位:秒)
(2)下面命令创建一个名为 t3 的表,并指定该表包含一个列族 cf1,同时设置该列族的数据的生存时间为 18000 秒(即 5 小时):
create 't3', {NAME => 'cf1', TTL => '18000'}

2,版本数设置

(1)在 0.96 的版本之前默认每个列族是 3version0.96 之后每个列族是 1version,在大合并时,会遗弃过期的版本。
(2)下面命令创建一个名为 t4 的表,并指定该表包含一个列族 cf1,同时设置该列族存储每个单元格的最大版本数为 3
create 't4', {NAME => 'cf1', VERSIONS => 3}

3,压缩设置

(1)HFile 可以被压缩并存放在 HDFS 上。这有助于节省硬盘 IO,但是读写数据时压缩和解压缩会抬高 CPU 利用率。
注意:压缩是表定义的一部分,可以在建表或修改表结构时设定。建议打开表的压缩,除非你确定不会从压缩中受益。只有在数据不能被压缩或者因为某种原因服务器的 CPU 利用率有限制要求的情况下,有可能会关闭压缩特性。
(2)HBase 可以使用多种压缩编码,包括 LZOSNAPPYGZIP。下面命令创建一个名为 t5 的表,并指定该表包含一个列族 cf1,同时为该列族设置数据压缩方式为 SNAPPY
create 't5',{NAME => 'cf1', COMPRESSION => 'SNAPPY'}

4,数据块(BLOCKSIZE)大小的配置

(1)我们在使用的时候根据业务需求来判断是随机查询需求多还是顺序查询需求多,然后根据具体的场景来确定数据块大小:
  • 随机查询:数据块越小,索引越大,查找性能更好
  • 顺序查询:更好的顺序扫描,需要更大的数据块
(2)下面命令创建一个名为 t6 的表,并定义一个列族 cf1,同时指定该列族的块大小(BLOCKSIZE)为 65537 字节。
create 't6',{NAME => 'cf1', BLOCKSIZE => '65537'}

5,数据块缓存设置

(1)如果一张表或表里的某个列族只被顺序化扫描访问或者很少被访问,这个时候就算 GetScan 花费时间是否有点儿长,我们也不会很在意。在这种情况下,我们可以选择关闭那些列族的缓存。
  • 如果我们只是执行很多顺序化扫描,我们会多次倒腾缓存,并且可能会滥用缓存把应该放进缓存获得性能提升的数据给排挤出去。
  • 如果关闭缓存,不仅可以避免上述情况发生,而且还可以让出更多缓存给其他表和同一个表的其他列族使用。
(2)下面命令创建一个名为 t7 的表,并定义一个列族 cf1,同时指定该列族不使用块缓存(BLOCKCACHE
create 't7',{NAME => 'cf1', BLOCKCACHE => 'false'}

6,布隆过滤器(Bloom filters)设置

(1)HBase 中存储额外的索引层次会占用额外的空间。布隆过滤器随着它们的索引对象的数据增长而增长,所以行级布隆过滤器比列标识符级布隆过滤器占用空间要少。当空间不是问题的时候,它们可以帮助我们榨干系统的性能潜力。
(2)使用行级布隆过滤器需要将 BLOOMFILTER 参数设置为 ROW(默认值),使用列标识符级布隆过滤器需要设置为 ROWCOL
  • 行级布隆过滤器在数据块里检查特定行键是否不存在
  • 列标识符级布隆过滤器检查行和列标识符联合体是否不存在,ROWCOL 布隆过滤器的开销要高于 ROW 布隆过滤器。
(3)创建一个名为 t8 的表,并定义一个列族 cf1,同时指定该列族使用 ROWCOL 类型的布隆过滤器:
create 't8',{NAME => 'cf1', BLOOMFILTER => 'ROWCOL'}
评论0