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

创建HBase索引进行数据查询

操作场景

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

使用约束

  • 列族应以“;”分隔。
  • 列和数据类型应包含在“[]”中。
  • 列数据类型在列名称后使用“->”指定。
  • 如果未指定列数据类型,则使用默认数据类型(字符串)。
  • “#”用于在两个索引详细信息之间进行分隔。
  • 以下是一个可选参数:

    -Dscan.caching:在扫描数据表时的缓存行数。

    如果不设置该参数,则默认值为1000。

  • 为单个Region构建索引是为了修复损坏的索引,此功能不应用于生成新索引。

创建HBase HIndex

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

    cd /opt/client

  4. 配置环境变量。

    source bigdata_env

  5. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

    kinit 组件业务用户

  6. 执行以下命令访问Hindex。

    hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer

    表1 HIndex常用命令

    功能

    命令

    增加索引

    TableIndexer-Dtablename.to.index=table1-Dindexspecs.to.add='IDX1=>cf1:[q1->datatype],[q2],[q3];cf2:[q1->datatype],[q2->datatype]#IDX2=>cf1:[q5]'

    构建索引

    TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.build='IDX1#IDX2'

    删除索引

    TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.drop='IDX1#IDX2'

    禁用索引

    TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.disable='IDX1#IDX2'

    同时添加和构建索引

    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'

    为单个Region构建索引

    TableIndexer -Dtablename.to.index=table1 -Dregion.to.index=regionEncodedName -Dindexnames.to.build='IDX1#IDX2'

    • IDX1:索引名称。
    • cf1:列族名称。
    • q1:列名称。
    • datatype:数据类型,包括String、Integer、Double、Float、Long、Short、Byte、Char。