1. 程式人生 > >hbase基於solr的實時索引

hbase基於solr的實時索引

實時查詢方案

Hbase  ----->  Key Value Store  ---> Solr ------->Web前端實時查詢展示

1.Hbase 提供海量資料儲存

2.Solr提供索引構建與查詢

3. Key Value Store 提供自動化索引構建(從Hbase到Solr)

使用流程

前提: CDH5.3.2Solr叢集搭建好,CDH5.3.2 Key-Value StoreIndexer叢集搭建好

1.開啟Hbase的複製功能

2. Hbase表需要開啟REPLICATION複製功能

create 'table',{NAME => 'cf', REPLICATION_SCOPE => 1} #其中1表示開啟replication功能,0表示不開啟,預設為0  

對於已經建立的表可以使用如下命令

disable 'table' 

alter 'table',{NAME => 'cf', REPLICATION_SCOPE => 1} 

enable 'table' 

3. 生成實體配置檔案, /opt/hbase-indexer/Test是自定義路徑,可以自己設定

solrctl instancedir --generate  /opt/cdhsolr/waslog

4.編輯生成好的scheme.xml檔案

把hbase表中需要索引的列新增到scheme.xml filed節點

5.建立collection例項並配置檔案上傳到zookeeper,命令

solrctl instancedir --create waslog  /opt/cdhsor/waslog

6.上傳到zookeeper之後,其他節點就可以從zookeeper下載配置檔案。接下來建立collection,命令:

solrctl collection –create  waslog  -s  15 –r 2 –m 50

7 在一個目錄建立一個xml檔案,該檔案確定solr和hbase的關係,示例如下

<?xml version="1.0" encoding="UTF-8"?>
<indexer table="pucentp_solr">
    <field name="entpname" value="cf:entpname" />
    <field name="address" value="cf:address" />
    <field name="policyname" value="cf:policyname" />
    <field name="policytel" value="cf:policytel" />
    <field name="createtime" value="cf:createtime" />
    <field name="updatetime" value="cf:updatetime" />
</indexer>

Table對應hbase表,fieldname對應solr裡的索引欄位 value是由列簇:列組成

8 在hbase-solr目錄下的bin目錄下執行hbase-indexer(cd /opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/bin)

./hbase-indexeradd-indexer -n myindexer -c /home/test/index/mapper.xml -cpsolr.zk=master:2181,slaver1:2181,slaver2:2181/solr -cp solr.collection=waslog-z master:2181,slaver1:2181,slaver2:2181

新增拼音分詞

 新增 pinyin4j-2.5.0​.jar  lucene-analyzers-smartcn-4.10.3.jar /opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib下。分發到其它從節點

修改schemal.xml

1.   <fieldTypename="text_pinyin"class="solr.TextField"positionIncrementGap="0">

2.   <analyzertype="index">

3.   <tokenizerclass="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>

4.   <filterclass="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>

5.   <filterclass="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory"minTermLenght="2"/>

6.   <filterclass="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory"minGram="1"maxGram="20"/>

7.   </analyzer>

8.   

9.   <analyzertype="query">

10.  <tokenizerclass="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>

11.  <filterclass="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>

12.  <filterclass="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory"minTermLenght="2"/>

13.  <filterclass="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory"minGram="1"maxGram="20"/>

14.  </analyzer>

15.  </fieldType>

新增smartcn分詞

1.   <fieldTypename="text_smartcn"class="solr.TextField"positionIncrementGap="0">

2.   <analyzertype="index">

3.   <tokenizerclass="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>

4.   <filterclass="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>

5.   </analyzer>

6.   <analyzertype="query">

7.   <tokenizerclass="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>

8.   <filterclass="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>

9.   </analyzer>

10.  </fieldType>

重啟solr叢集