在HBase

时间:2016-02-20 19:16:59

标签: hadoop hbase ttl

我正在尝试在Hbase上设置一个TTL行。我无法将TTL设置为列族,因为该表已经存在,我无法更改它。

我尝试的是在Put操作中使用setTTL函数。但它似乎无法正常工作,因为即使时间过去,当我对表进行扫描操作时信息仍然存在。

如果我在函数中加了一个负值,我表中没有任何数据,我认为那是有意义的,因为我使用的是负ttl,因此根本没有存储数据。 ..

1)你认为我正在使用正确的功能吗?

2)有没有办法在HBase中看到这些信息(一行的TTL值)?

修改 以下是 describe 命令的输出(请提醒我无法更改列族的TTL值):

hbase(main):010:0> describe "Snapshot"
Table Snapshot is ENABLED
Snapshot, {CONFIGURATION => {'KeyPrefixRegionSplitPolicy.prefix_length' => '8', 'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy'}}
COLUMN FAMILIES DESCRIPTION
{NAME => 'metadata', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'GZ', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
{NAME => 'sample', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'GZ', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

Edit2:我想我可能遇到过一个错误或者HBase版本1.0.0的奇怪之处,因为在大多数情况下TTL正如预期的那样工作。但是,如果我设置它并在它到期之前,我强制在表格中拆分,我发现TTL将不再起作用。就像拆分过程中没有维护Cell TTL值一样。我之前发现它不适合我,因为我的TTL是aprox。 1天,我在那段时间里遇到了一些分裂事件。

我将在其他版本中验证此行为,如果找到新内容,则会通知您。

1 个答案:

答案 0 :(得分:2)

该列系列的MIN_VERSION参数是多少?如上所述,如果它是1,则hbase保持值甚至ttl已过期。

http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/44036

(感谢问题,我今天学到了新东西:))