更新HBase表TTL前是否必须先禁用表?
HBase修改TTL是否需要先禁用表?
好问题!这其实取决于你使用的HBase版本,我给你分情况说明:
HBase 0.98及更高版本:完全不需要禁用表!你可以直接执行ALTER命令修改列族的TTL,操作是在线的,不会影响表的正常读写。
举个例子,修改名为user_info的表中basic列族的TTL为86400秒(1天):ALTER 'user_info', {NAME => 'basic', TTL => 86400}这里要注意:这个修改只对之后写入的新数据生效,已经存在的旧数据不会自动应用新的TTL规则。如果想让旧数据也遵循新TTL,需要手动触发一次major compaction(TTL的清理逻辑是在compaction阶段执行的),命令如下:
major_compact 'user_info'不过major compaction会消耗集群资源,建议选在业务低峰期操作。
HBase 0.98之前的旧版本:必须先禁用表才能修改TTL,否则ALTER操作会直接失败。步骤是:
- 禁用表:
disable 'user_info' - 修改TTL:
ALTER 'user_info', {NAME => 'basic', TTL => 86400} - 重新启用表:
enable 'user_info'
- 禁用表:
另外补充个小技巧:如果需要修改多个列族的TTL,可以在一条ALTER命令里完成,不用分开执行:
ALTER 'user_info', {NAME => 'basic', TTL => 86400}, {NAME => 'ext', TTL => 604800}
内容的提问来源于stack exchange,提问作者Sonika Suman
相关产品推荐
相关产品推荐

