全部产品

建立索引说明

更新时间:2019-03-08 00:18:28

建立索引说明

本文介绍如何开通“HBase全文索引服务”,并进行索引创建同步工作;简述索引管理命令工具使用说明。

Solr服务开通

可以通过阿里云控制台HBase实例页面左边栏“全文索引服务”页面,进行Solr服务开启操作,如下图:开通solr服务界面

开启“全文索引服务”过程中,涉及到资源重新划分以及配置生效,会滚动重启HBase服务使得更新的配置得以生效。建议:合理规划选用HBase的实例规格,例如原先业务使用HBase是4c8g的,如果开通Solr后,业务有进一步的扩大,可以考虑选用8c16g的,或者更大的,节点数可以减少,后续可以横向扩容。

注意:只有2019年1月23号之后创建的HBase实例才可以在控制台自行开启本服务。若有其他需求可联系“云HBase答疑”客服。

推荐开始使用时,联系“云HBase答疑” 提出Solr业务需求,客服会为你提供参考和建议。

目前rebuild全量索引使用到弹性计算EMR,注意HBase购买时,预先创建自己的VPC,以便后续安装EMR时可以选择与HBase使用相同的VPC。
Solr使用模式说明

“全文索引服务”是使用Solr进行提供,并没有强行要求Solr必须作为云HBase的索引服务使用,用户可以根据需求,也可以在Solr中保存与HBase表无关的数据。不过用户需要明确使用Solr单独存储大量数据的利弊,我们推荐尽可能少的、或者只有需要检索的条件字段数据才保存到Solr。更多问题可以事先与“云HBase答疑”客服沟通。

下面仅介绍Solr作为HBase表的索引服务时的操作说明

客户端准备

下载解压客户端, md5值为:e69fa231138cb34a61cbb861d9a53d00

  1. wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/solr-7.3.1-ali-1.0.tgz
  2. tar zxvf solr-7.3.1-ali-1.0.tgz

修改solr-7.3.1-ali-1.0/bin/solr.in.sh文件,去掉ZK_HOST前面注释“#”,并修改如下:

  1. ZK_HOST=zk1:2181,zk2:2181,zk3:2181/solr

Solr的zk地址见Solr服务开通控制台界面。

开始使用创建索引

下面我们演示如何给HBase表创建一张索引

创建HBase表

首先我们需要使用 hbase shell中创建一张HBase表,如下:

  1. create 'solrdemo',{NAME=>'info', REPLICATION_SCOPE=> '1'}

其中REPLICATION_SCOPE=>’1’表示使用replication进行同步索引。其他参数无差异,如COMPRESSION等。这里不多做介绍。

创建索引
  1. 事先在solr创建好名为democollection的 collection索引集合。solr命令这里不做介绍,可以参考:solr collections api
    如:上传schema/solrconfig.xml配置目录到zk的“/solr/configs/” 目录下

    1. bin/solr zk upconfig -d _democonfig -n democollection_config

    使用刚上传的配置,创建democollection

    1. curl "http://hostname:8983/solr/admin/collections?action=CREATE&name=democollection&numShards=1&replicationFactor=1&collection.configName=democollection_config"

    action:指定动作为 CREATE 创建一个solr collection
    name: 指定Solr中的表名;
    numShards: 指定shards分区个数;
    replicationFactor: 指定每个shard分区的副本个数;
    collection.configName: 指定使用哪个zk配置目录下的solrconfig.xml、schema配置创建这个democollection。用户最好指定这个刚上传的 “_democonfig”,如果有自己特定需求,建议通过修改这个目录下的solrconfig.xml和schema文件来满足,特殊修改可以联系 “云HBase答疑”进行了解更多。
    其中hostname使用对应solr节点或者core节点hostname或者ip即可。

  2. 然后准备indexer_conf.xml配置,描述hbase表solrdemo与democollection的字段映射关系。indexer_conf.xml配置如下:

    1. <?xml version="1.0"?>
    2. <indexer table="solrdemo">
    3. <field name="name_s" value="info:q2" type="string"/>
    4. <field name="age_i" value="info:q3" type="int"/>
    5. <param name="update_version_l" value="true"/>
    6. </indexer>

    配置描述了hbase表solrdemo的 info:q2 info:3 分别映射成solr collection里面的name_s和age_i 字段。并指定以string解析info:q2 列保存到name_s字段中,以int解析info:q3 保存到age_i中。其中solr collection的name_s、age_i是何种类型,是根据solr collection的配置觉得,默认采用动态类型推断,即根据collection字段的名字后缀判断类型进行存储。常见类型_i、_s、_l、_b、_f、_d分别对应int/string/long/boolean/float/double。当然,用户也可以直接指定字段类型,其他更多动态类型映射,请参考 默认schema中的动态类型
    最后一个update_version_l为固定写法,保存document级别的最新更新时间。

注:若你使用的是hbase2.x开启全文索引服务,则先不开启update_version_l,并且不使用_democonfig配置,详情请咨询“云HBase答疑”客服。

  1. 最后运行 hbase-indexer脚本创建索引命令
    1. solr-7.3.1-ali-1.0/bin/solr-indexer add \
    2. -n demoindex \
    3. -f indexer_conf.xml \
    4. -c democollection
    bin/hbase-indexer脚本参数详细介绍见本文最下方。

add-indexer表示添加索引命令
-n demoindex 指定索引名为 demoindex
-f index_conf.xml为索引配置,它描述了hbase列如何映射到solr doc字段中
-c democollection 指定同步hbase数据到这个democollection中。

  1. 运行验证运行solr-7.3.1-ali-1.0/bin/solr-indexer list确认索引创建成功。运行hbase api向solrdemo插入数据,例如插入了:
    row1,info:q1, v01
    row1,info:q2, smith
    row1,info:q3, 35
    row1,info:q4, v04
    注意,因为info:q3对应设置的是int类型索引,所以我们写hbase的时候,这个列的byte[]数组是通过Bytes.toBytes(int num)得到的bytes,这样在同步索引的时候才能解析正确。
    插入数据后,可以运行Solr Query命令查询数据是否已经同步到solr 的democollection上。HBase一个row对应Solr里面的一个document,document id就是hbase表的rowkey字段。如上述建好索引后插入数据,隔数秒后(solr间隔数秒commit一次并open reader才对外可见)运行
    1. curl http://hostname:8983/solr/democollection/query?q=*:*
    会显示doc如下,表示同步完成。
    1. {
    2. "id":"row1",
    3. "_version_":1609296031242123453,
    4. "name_s":"smith",
    5. "age_i": 35
    6. }

命令详细介绍

上述我们描述了

  1. solr-indexer list [-dump] [-t tableName]
  2. solr-indexer delete -n indexerName
  3. solr-indexer add
  4. -n indexName
  5. -f indexer_conf.xml
  6. -c democollection
  7. -z zk1,zk2,zk3/solr
  8. solr-indexer update
  9. -n indexName
  10. -f indexer_conf.xml
  11. -c democollection
  12. -z zk1,zk2,zk3/solr

HBase表的byte[] rowkey 与 solr document id转换关系如下:
  • string: 默认hbase的rowkey以Bytes.toString(byte[] rowkey)转换为 document id;
  • hex: 提供commons-codec包的 Hex.encodeHexString(byte[] rowkey) 转换为hex方式的document id。对应反解析即可。


指定方式如下:index_conf.xml, 指定unique-key-formatter为 “hex”或者“string”,默认是string

  1. <indexer table="solrdemo" unique-key-formatter="hex">
  2. ...
  3. </indexer>