更新时间:2025-12-08 GMT+08:00
分享

创建HBase索引进行数据查询

操作场景

HBase是一个Key-Value类型的分布式存储数据库,HIndex为HBase提供了按照某些列的值进行索引的能力,缩小搜索范围并缩短时延。

约束与限制

  • 列族应以“;”分隔。
  • 列和数据类型应包含在“[]”中。
  • 列数据类型在列名称后使用“->”指定。
  • 如果未指定列数据类型,则使用默认数据类型(字符串)。
  • “#”用于在两个索引详细信息之间进行分隔。
  • 为单个Region构建索引是为了修复损坏的索引,此功能不应用于生成新索引。

创建HBase HIndex

  1. 安装HBase客户端,详情参见HBase客户端使用实践
  2. 以客户端安装用户,登录安装客户端的节点。
  3. 进入客户端安装路径,例如“/opt/client

    cd /opt/client

  4. 配置环境变量。

    source bigdata_env

  5. 如果集群已启用Kerberos认证(安全模式),执行以下命令进行用户认证集群未启用Kerberos认证(普通模式)无需执行用户认证操作

    kinit 组件业务用户

  6. HBase表添加Hindex索引,例如,执行以下命令为表table1添加索引IDX1IDX2

    hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=test -Dindexspecs.to.add='IDX1=>cf1:[q1->datatype],[q2],[q3];cf2:[q1->datatype],[q2->datatype]#IDX2=>cf1:[q5]'

    更多索引相关操作请参见表1,其中:

    • IDX1表示索引名称。
    • cf1:表示列族名称。
    • q1:表示列名称。
    • datatype:表示数据类型,支持String、Integer、Double、Float、Long、Short、Byte、Char。
    • -Dscan.caching(可选):用于控制TableIndexer执行扫描操作时的缓存大小,即每次从HBase表中读取的行数。如果不设置该参数,则默认值为1000。
    表1 HIndex常用命令

    命令

    说明

    示例

    -Dindexnames.to.build

    构建索引

    • 构建表table1已定义的索引IDX1IDX2
      hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.build='IDX1#IDX2'
    • 为表table1添加索引IDX1IDX2,并构建IDX1索引:
      hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dindexspecs.to.add='IDX1=>cf1:[q1->datatype],[q2],[q3];cf2:[q1->datatype],[q2->datatype]#IDX2=>cf1:[q5]' -Dindexnames.to.build='IDX1'

    -Dindexnames.to.drop

    删除索引

    删除表table1的索引IDX1IDX2

    hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.drop='IDX1#IDX2'

    -Dindexnames.to.disable

    禁用索引

    禁用表table1的索引IDX1IDX2

    hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.disable='IDX1#IDX2'

    -Dregion.to.index

    为单个Region构建索引

    为表table1的单个Region构建索引IDX1IDX2

    hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dregion.to.index=regionEncodedName -Dindexnames.to.build='IDX1#IDX2'

相关文档