Hbase的TTL字段超时设置测试

来源:互联网 发布:何以知之的以 编辑:程序博客网 时间:2024/05/22 18:33

在工作中,很多时候需要对表字段进行限定,例如限定一列的超时时间等。

今天就总结一下:

1. 做Hbase表做更改前,首先要disable 这个表,否则记录会丢失。

首先,我们建立一个测试表test,有一个列簇fa

hbase(main):111:0> describe 'test'
DESCRIPTION                                                       ENABLED                           
 'test', {NAME => 'fa', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTE true                              
 R => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSI                                   
 ON => 'NONE', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DELETED_CE                                   
 LLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOC                                   
 KCACHE => 'true'}                                                                                  
1 row(s) in 0.0770 seconds

表默认的TTL超时时间为:TTL => '2147483647'  大约596523.2352777778小时=24855.13天=69.04年

也就是说从最后一次更新的记录应该69.04年才会自动失效。

那么对于某些列,我存储一段时间后,需要该列值失效。那如何设置?下面我们做一个测试:

我们先向test表中插入一下记录:

1           2014-11-11 14:09:40

2           2014-11-12 14:09:40

3           2014-11-13 14:09:40

4           2014-11-14 14:09:40

5           2014-11-15 14:09:40


hbase(main):082:0> put 'test',1,'fa:uptime','2014-11-11 14:09:40'

。。。。。。。。。。。。。

hbase(main):123:0>  scan 'test'
ROW                        COLUMN+CELL                                                              
 1                         column=fa:uptime, timestamp=1415688066815, value=2014-11-11 14:09:40     
 2                         column=fa:uptime, timestamp=1415688082648, value=2014-11-12 14:09:40     
 3                         column=fa:uptime, timestamp=1415688092101, value=2014-11-13 14:09:40     
 4                         column=fa:uptime, timestamp=1415688101473, value=2014-11-14 14:09:40     
 5                         column=fa:uptime, timestamp=1415688115318, value=2014-11-15 14:09:40     
5 row(s) in 0.0400 seconds

我们修改过期时间为200s 查看记录

hbase(main):126:0> disable 'test'           //修改表前,需要先disable 表

hbase(main):114:0> alter "test",NAME=>'fa',TTL=>'200'  //修改表的列簇超时时间为200s

hbase(main):114:0> enable  "test"          //使表可用,以供查询

hbase(main):129:0>  scan 'test'           //此时查询时,表中原来的5条,记录均存在,接下来我们更新其中一条。再查看。
ROW                        COLUMN+CELL                                                              
 1                         column=fa:uptime, timestamp=1415688066815, value=2014-11-11 14:09:40     
 2                         column=fa:uptime, timestamp=1415688082648, value=2014-11-12 14:09:40     
 3                         column=fa:uptime, timestamp=1415688092101, value=2014-11-13 14:09:40     
 4                         column=fa:uptime, timestamp=1415688101473, value=2014-11-14 14:09:40     
 5                         column=fa:uptime, timestamp=1415688115318, value=2014-11-15 14:09:40     
5 row(s) in 0.0420 seconds

由于200s时间很短,我们选择跟新第三条记录:跟新为:3           2014-11-16 14:09:40

hbase(main):130:0> put 'test',3,'fa:uptime','2014-11-16 14:09:40'
0 row(s) in 0.0200 seconds

更新后再去查看,发现表中的记录只剩下一条了:也就是我们最后跟新的这条。为什么后面的会消失呢,是因为,变测试变写博客,200s时间稍短,更新第三条,记录后,写过博客再去查看,此时就连第5条记录也过期了。
hbase(main):131:0> scan 'test'
ROW                        COLUMN+CELL                                                              
 3                         column=fa:uptime, timestamp=1415688323548, value=2014-11-16 14:09:40     
1 row(s) in 0.0140 seconds

再过200后查看,表中的记录数为空,所有的记录都超时,被删除。

总结:测试说明,我们可用对hbase的某些列簇,做一些高级设置,例如超时,压索,等设置。注意在设置之前需要先disable表,否则,表中记录会被清空。

 另外,TTL=>的更新超时时间是指:该列最后更新的时间,到超时时间的限制,而不是第一次创建,到超时时间。

原创粉丝点击