更新时间:2024-09-18 GMT+08:00

修改HBase全局二级索引状态

索引状态介绍

索引状态反映了索引当前的使用情况,全局二级索引支持以下五种状态:

  • ACTIVE:索引正常,可以正常读写。
  • UNUSABLE:索引被禁用,索引数据会正常写入,查询时无法使用这个索引。
  • INACTIVE:索引异常,索引数据与数据表不一致,跳过生成该索引的索引数据,查询数据时无法使用该索引。
  • BUILDING:索引数据正常批量生成,索引数据生成工具执行结束会自动转换到ACTIVE状态,此状态下可以正常读写。
  • DROPPING:索引正在被删除,跳过生成该索引的索引数据,查询数据时无法使用该索引。

基于工具的索引状态修改,支持图1所示的状态转换。

图1 索引状态转换图

场景介绍

用户可以使用全局二级索引工具禁用/启用某个索引。

修改HBase全局二级索引状态

在HBase客户端执行以下命令可禁用/启用某个索引:

hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.index='table' -D[idx_state_opt]='idx1'

相关参数介绍如下:

  • tablename.to.index:表示需修改索引状态的数据表的名称。
  • idx_state_opt:表示修改索引的目标状态,可选参数如下:
    • indexnames.to.inactive:表示将指定的索引转换为INACTIVE状态。
    • indexnames.to.active:表示将指定的索引转换为ACTIVE状态。
    • indexnames.to.unusable:表示将指定的索引转换为UNUSABLE状态。

例如:修改状态为ACTIVE的table表的索引idx1的状态为UNUSABLE:

hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.index='table' -Dindexnames.to.unusable='idx1'

执行成功后,再次查看索引信息:

hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.show='table'

图2所示,idx1的索引状态已被修改:

图2 idx1索引状态