
# 创建HBase索引进行数据查询
#### 操作场景
HBase是一个Key-Value类型的分布式存储数据库，HIndex为HBase提供了按照某些列的值进行索引的能力，缩小搜索范围并缩短时延。
#### 使用约束
- 列族应以";"分隔。
- 列和数据类型应包含在"\[\]"中。
- 列数据类型在列名称后使用"-\>"指定。
- 如果未指定列数据类型，则使用默认数据类型（字符串）。
- "#"用于在两个索引详细信息之间进行分隔。
- 以下是一个可选参数： -Dscan.caching：在扫描数据表时的缓存行数。
  如果不设置该参数，则默认值为1000。
  

- 为单个Region构建索引是为了修复损坏的索引。 此功能不应用于生成新索引。
  
 
#### 创建HBase HIndex
1. 安装HBase客户端，详情参见[HBase客户端使用实践](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_0340.html)。
2. 进入客户端安装路径，例如"/opt/client" 
   **cd /opt/client**
   
   
3. 配置环境变量。 
   **source bigdata_env**
   
   
4. 如果集群为安全模式，执行以下命令进行用户认证。普通模式集群无需执行用户认证。 
   **kinit** *组件业务用户*
   
   
5. 执行以下命令访问Hindex。 
   **hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer**
   表1HIndex常用命令 
   | 功能            | 命令                                                                                                                                                                                               |
   |:---|:---|
   | 增加索引          | 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'                                                                                   |
      
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - **IDX1：**索引名称。
   
   - **cf1**：列族名称。
   
   - **q1**：列名称。
   
   - **datatype**：数据类型，包括String、Integer、Double、Float、Long、Short、Byte、Char。
    
   
   
 
