
# 创建HBase索引进行数据查询
#### 操作场景
HBase是一个Key-Value类型的分布式存储数据库，在海量数据存储场景中，用户使用HBase进行数据查询时HIndex为HBase提供了按照某些列的值进行索引的能力，缩小搜索范围并缩短时延，可显著提升查询效率。本章节将指导您创建HBase HIndex索引并基于索引进行数据查询。
#### 约束与限制
- 列族应以";"分隔。
- 列和数据类型应包含在"\[\]"中。
- 列数据类型在列名称后使用"-\>"指定。
- 如果未指定列数据类型，则使用默认数据类型（字符串）。
- "#"用于在两个索引详细信息之间进行分隔。

- 为单个Region构建索引是为了修复损坏的索引，此功能不应用于生成新索引。
 
#### 创建HBase HIndex
1. 安装HBase客户端，详情参见[HBase客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0340.html)。
2. 以客户端安装用户，登录安装客户端的节点。
3. 进入客户端安装路径，例如"/opt/client" 
   ```
   cd /opt/client
   ```
   
   
4. 配置环境变量。 
   ```
   source bigdata_env
   ```
   
   
5. 如果集群已启用Kerberos认证（安全模式），执行以下命令进行用户认证；集群未启用Kerberos认证（普通模式）无需执行用户认证操作。 
   ```
   kinit 组件业务用户
   ```
   
   
6. 为HBase表添加Hindex索引： 
   ```
   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。
   
   
    表1HIndex常用命令 
   | 命令                      | 说明             | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|:---|
   | -Dindexnames.to.build   | 构建索引。          | - 构建表**table1** 已定义的索引**IDX1** 和**IDX2** ： ``` hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.build='IDX1#IDX2' ```     - 为表**table1** 添加索引**IDX1** 和**IDX2** ，并构建**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** 的索引**IDX1** 和**IDX2**： ``` hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.drop='IDX1#IDX2' ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | -Dindexnames.to.disable | 禁用索引。          | 禁用表**table1** 的索引**IDX1** 和**IDX2**： ``` hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.disable='IDX1#IDX2' ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | -Dregion.to.index       | 为单个Region构建索引。 | 为表**table1** 的单个Region构建索引**IDX1** 和**IDX2**： ``` hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer -Dtablename.to.index=table1 -Dregion.to.index=regionEncodedName -Dindexnames.to.build='IDX1#IDX2' ```                                                                                                                                                                                                                                                                                                                                                                                                                            |
      
   
   
 
