创建HBase索引进行数据查询
操作场景
HBase是一个Key-Value类型的分布式存储数据库,HIndex为HBase提供了按照某些列的值进行索引的能力,缩小搜索范围并缩短时延。
约束与限制
- 列族应以“;”分隔。
- 列和数据类型应包含在“[]”中。
- 列数据类型在列名称后使用“->”指定。
- 如果未指定列数据类型,则使用默认数据类型(字符串)。
- “#”用于在两个索引详细信息之间进行分隔。
- 为单个Region构建索引是为了修复损坏的索引,此功能不应用于生成新索引。
创建HBase HIndex
- 安装HBase客户端,详情参见HBase客户端使用实践。
- 以客户端安装用户,登录安装客户端的节点。
- 进入客户端安装路径,例如“/opt/client”
cd /opt/client - 配置环境变量。
source bigdata_env
- 如果集群已启用Kerberos认证(安全模式),执行以下命令进行用户认证;集群未启用Kerberos认证(普通模式)无需执行用户认证操作。
kinit 组件业务用户
- 为HBase表添加Hindex索引,例如,执行以下命令为表table1添加索引IDX1和IDX2:
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已定义的索引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'