1.1 一次性创建索引
l、 删除全索引
效率很高,可以关闭Solr后,直接删除Data文件。
2、 重新创建全索引
拉取HBase中全数据,分批次创建索引。
1.2 增量创建索引
1、触发器发送数据到Solr建索引。
配置并使用HBase触发器功能,配置实现如下:
alter 'angelHbase', METHOD => 'table_att', 'coprocessor' => '/home/hbase/hbase-0.94.18-security/lib/solrHbase.jar|solrHbase.test.SorlIndexCoprocessorObserver|1073741823|'
alter 'angelHbase', METHOD =>'table_att_unset', NAME => 'coprocessor$1'
然 后编写SorlIndexCoprocessorObserver extendsBaseRegionObserver,重写postPut方法。在postPut方法中,需要正确地读出写入HBase的数据结构及数 据,然后转化为相应的SolrInputDocument,再使用ConcurrentUpdateSolrServer方式向Solr服务器发送 SolrInputDocument数据,具体使用方法如之前博文介绍Solr的使用方法、性能对比所示。
注意:需要把Solr相关的jar包放入lib下,并且删除版本不一致的jar(有很多)。更新jar后要重启HBase才能生效。
具体性能如之前博文介绍Solr的使用方法、性能对比所示。 javascript:void(0) javascript:void(0)
2、触发器发送数据到RabbitMQ,Solr端从RabbitMQ获取数据建索引。
embedded方式官方不推荐使用。而使用ConcurrentUpdateSolrServer性能与上种方式并无区别。
3、 建议:
在HBase中只存储1列,存储值为PB或Json串。(存在由bean到SolrInputDocument转化的类及annotation,以及各自的压缩算法)
或 者:插入HBase的数据均以Bytes.toBytes(String)类型存储,如long型数值2存储为Bytes.toBytes(""+2)。 否则在postPut()中需要知道每列的具体类型才能生成正确的SolrInputDocument,因为SolrInputDocument中需要的 是String类型的数据。
具体的postPut方法代码
1.3 HBase与Solr系统架构设计
使用HBase搭建结构数据存储云,用来存储海量数据;使用SolrCloud集群用来搭建搜索引擎,将要查找的结构化数据的ID查找出来,只配置它存储ID。
1、具体流程:
wd代表用户write data写数据,从用户提交写数据请求wd1开始,经历wd2,写入MySQL数据库,或写入结构数据存储云中,wd3,提交到Solr集群中,从而依据业务需求创建索引。
rd代表用户read data读数据,从用户提交读数据请求rd1开始,经历rd2,直接读取MySQL中数据,或向Solr集群请求搜索服务,rd3,向Solr集群请求得 到的搜索结果为ID,再向结构数据存储云中通过ID取出数据,最后返回给用户结果。
标签:架构设计,存储,Solr,索引,HBase,数据,SolrInputDocument From: https://blog.51cto.com/u_13991401/5890082