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叢集