Hbase中如何修改表TTL设置,实现数据自动过期删除?

2026-04-11 07:181阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计700个文字,预计阅读时间需要3分钟。

Hbase中如何修改表TTL设置,实现数据自动过期删除?

介绍+为HBase表数据指定过期时间,达到过期时间后,compaction时自动删除过期数据。+通常HBase表默认TTL为FOREVER,或者你可以指定一个TTL(单位:秒)值。+修改表结构命令有两个:+alter+和+alter_async+。+异常+

介绍

为hbase表数据指定过期时间,达到过期时间后,compaction时自动删除过期数据。

  • 通常Hbase表默认TTL为FOREVER, 或者你可以指定一个TTL(单位秒)值
  • 修改表结构命令有两个alter alter_async,异步方式还可通过alter_status查看进度。通常选择异步方式,下边也以alter_async为例。
  • 修改线上业务表时注意,修改表结构是有损的,修改表的过程region需要关闭、重新打开,所以修改过程可能会有NotServingRegionException

TTL的变更情形:

  1. 当TTL过长,想调小一下
  2. 当前TTL太短,想调大一些
  3. 一个永久表,指定一个TTL(其实也相当于调小)
  4. 一个TTL表,指定为永久表 (其实相当于调大)
测试

前3种情形,在语法上其实是一种情况,如下:

-- 注意TTL单位为秒,自己换算成需要的大小即可 alter_async 'TABLE_NAME',{NAME => 'f',TTL => '10368000'}

第4种情况,要改为永久,永久是多久呢?
我们知道默认不指定TTL,会显示TTL=>'FOREVER'
是否可以直接使用呢,结果是不可以

hbase(main):004:0> alter_async 'TABLE_NAME',{NAME => 'f',TTL => 'FOREVER'} ERROR: For input string: "FOREVER"

看下代码里这个值为2147483647

hbase(main):005:0> alter_async 'TABLE_NAME',{NAME => 'f',TTL => '2147483647'} 0 row(s) in 0.9220 seconds -- 可以看到TTL => 'FOREVER',修改成功 hbase(main):002:0> desc 'TABLE_NAME' Table HT:DENYLOG_TIME is ENABLED TABLE_NAME, {CONFIGURATION => {'hbase.hregion.max.filesize' => '10737418240'}} COLUMN FAMILIES DESCRIPTION {NAME => 'f', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'SNAPPY ', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.1070 seconds

我们再试一下TTL => '-1'行不行呢?

Hbase中如何修改表TTL设置,实现数据自动过期删除?

-- 貌似修改成功了 hbase(main):003:0> alter_async 'HT:DENYLOG_TIME',{NAME => 'f',TTL => '-1'} 0 row(s) in 0.9660 seconds -- TTL => '-1 SECONDS'?显然是不可以的 hbase(main):002:0> desc 'TABLE_NAME' TABLE_NAME HT:DENYLOG_TIME is ENABLED Test, {CONFIGURATION => {'hbase.hregion.max.filesize' => '10737418240'}} COLUMN FAMILIES DESCRIPTION {NAME => 'f', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => '-1 SECONDS', COMPRESSION => 'SNAPPY ', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.1070 seconds 总结

-- 设置、调大或调小TTL alter_async 'TABLE_NAME',{NAME => 'f',TTL => '秒数'} -- 恢复TTL为永久,其值不可以使用FOREVER或-1 alter_async 'TABLE_NAME',{NAME => 'f',TTL => '2147483647'} Snow nothing, reap nothing.

标签:HBase修改

本文共计700个文字,预计阅读时间需要3分钟。

Hbase中如何修改表TTL设置,实现数据自动过期删除?

介绍+为HBase表数据指定过期时间,达到过期时间后,compaction时自动删除过期数据。+通常HBase表默认TTL为FOREVER,或者你可以指定一个TTL(单位:秒)值。+修改表结构命令有两个:+alter+和+alter_async+。+异常+

介绍

为hbase表数据指定过期时间,达到过期时间后,compaction时自动删除过期数据。

  • 通常Hbase表默认TTL为FOREVER, 或者你可以指定一个TTL(单位秒)值
  • 修改表结构命令有两个alter alter_async,异步方式还可通过alter_status查看进度。通常选择异步方式,下边也以alter_async为例。
  • 修改线上业务表时注意,修改表结构是有损的,修改表的过程region需要关闭、重新打开,所以修改过程可能会有NotServingRegionException

TTL的变更情形:

  1. 当TTL过长,想调小一下
  2. 当前TTL太短,想调大一些
  3. 一个永久表,指定一个TTL(其实也相当于调小)
  4. 一个TTL表,指定为永久表 (其实相当于调大)
测试

前3种情形,在语法上其实是一种情况,如下:

-- 注意TTL单位为秒,自己换算成需要的大小即可 alter_async 'TABLE_NAME',{NAME => 'f',TTL => '10368000'}

第4种情况,要改为永久,永久是多久呢?
我们知道默认不指定TTL,会显示TTL=>'FOREVER'
是否可以直接使用呢,结果是不可以

hbase(main):004:0> alter_async 'TABLE_NAME',{NAME => 'f',TTL => 'FOREVER'} ERROR: For input string: "FOREVER"

看下代码里这个值为2147483647

hbase(main):005:0> alter_async 'TABLE_NAME',{NAME => 'f',TTL => '2147483647'} 0 row(s) in 0.9220 seconds -- 可以看到TTL => 'FOREVER',修改成功 hbase(main):002:0> desc 'TABLE_NAME' Table HT:DENYLOG_TIME is ENABLED TABLE_NAME, {CONFIGURATION => {'hbase.hregion.max.filesize' => '10737418240'}} COLUMN FAMILIES DESCRIPTION {NAME => 'f', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'SNAPPY ', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.1070 seconds

我们再试一下TTL => '-1'行不行呢?

Hbase中如何修改表TTL设置,实现数据自动过期删除?

-- 貌似修改成功了 hbase(main):003:0> alter_async 'HT:DENYLOG_TIME',{NAME => 'f',TTL => '-1'} 0 row(s) in 0.9660 seconds -- TTL => '-1 SECONDS'?显然是不可以的 hbase(main):002:0> desc 'TABLE_NAME' TABLE_NAME HT:DENYLOG_TIME is ENABLED Test, {CONFIGURATION => {'hbase.hregion.max.filesize' => '10737418240'}} COLUMN FAMILIES DESCRIPTION {NAME => 'f', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => '-1 SECONDS', COMPRESSION => 'SNAPPY ', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.1070 seconds 总结

-- 设置、调大或调小TTL alter_async 'TABLE_NAME',{NAME => 'f',TTL => '秒数'} -- 恢复TTL为永久,其值不可以使用FOREVER或-1 alter_async 'TABLE_NAME',{NAME => 'f',TTL => '2147483647'} Snow nothing, reap nothing.

标签:HBase修改