概述
在Hbase中,表的RowKey 按照字典排序, Region按照RowKey設置split point進行shard,通過這種方式實現的全局、分布式索引. 成為了其成功的最大的砝碼。
然而單一的通過RowKey檢索數據的方式,不再滿足更多的需求,查詢成為Hbase的瓶頸,人們更加希望像Sql一樣快速檢索數據,可是,Hbase之前定位的是大表的存儲,要進行這樣的查詢,往往是要通過類似Hive、Pig等系統進行全表的MapReduce計算,這種方式既浪費了機器的計算資源,又因高延遲使得應用黯然失色。於是,針對HBase Secondary Indexing的方案出現了。
Solr
Solr是一個獨立的企業級搜索應用服務器,是Apache Lucene項目的開源企業搜索平台,
其主要功能包括全文檢索、命中標示、分面搜索、動態聚類、數據庫集成,以及富文本(如Word、PDF)的處理。Solr是高度可擴展的,並提供了分布式搜索和索引復制。Solr 4還增加了NoSQL支持,以及基於Zookeeper的分布式擴展功能SolrCloud。SolrCloud的說明可以參看:SolrCloud分布式部署。它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,Solr是一個高性能,采用Java5開發,基於Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。
Solr可以高亮顯示搜索結果,通過索引復制來提高可用,性,提供一套強大Data Schema來定義字段,類型和設置文本分析,提供基於Web的管理界面等。
Key-Value Store Indexer
這個組件非常關鍵,是Hbase到Solr生成索引的中間工具。
在CDH5.3.2中的Key-Value Indexer使用的是Lily HBase NRT Indexer服務.
Lily HBase Indexer是一款靈活的、可擴展的、高容錯的、事務性的,並且近實時的處理HBase列索引數據的分布式服務軟件。它是NGDATA公司開發的Lily系統的一部分,已開放源代碼。Lily HBase Indexer使用SolrCloud來存儲HBase的索引數據,當HBase執行寫入、更新或刪除操作時,Indexer通過HBase的replication功能來把這些操作抽象成一系列的Event事件,並用來保證寫入Solr中的HBase索引數據的一致性。並且Indexer支持用戶自定義的抽取,轉換規則來索引HBase列數據。Solr搜索結果會包含用戶自定義的columnfamily:qualifier字段結果,這樣應用程序就可以直接訪問HBase的列數據。而且Indexer索引和搜索不會影響HBase運行的穩定性和HBase數據寫入的吞吐量,因為索引和搜索過程是完全分開並且異步的。Lily HBase Indexer在CDH5中運行必須依賴HBase、SolrCloud和Zookeeper服務。
實時查詢方案
Hbase -----> Key Value Store ---> Solr -------> Web前端實時查詢展示
1.Hbase 提供海量數據存儲
2.Solr提供索引構建與查詢
3. Key Value Store 提供自動化索引構建(從Hbase到Solr)
使用流程
前提: CDH5.3.2Solr集群搭建好,CDH5.3.2 Key-Value Store Indexer集群搭建好
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節點,其中的name屬性值要與Morphline.conf文件中的outputField屬性值對應
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.創建Lily HBase Indexer配置文件
morphline-hbase-mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<indexer table="waslog" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper">
<param name="morphlineFile" value="morphlines.conf"></param>
<param name="morphlineId" value="waslogMap"></param>
</indexer>
其中morphlineId 的value是對應Key-Value Store Indexer 中配置文件Morphlines.conf 中morphlines 屬性id值
8.修改Morphlines 文件, 具體操作:進入Key-Value Store Indexer面板->配置->查看和編輯->屬性-Morphline文件
morphlines : [ { id :waslogMap importCommands : ["org.kitesdk.**", "com.ngdata.**"] commands : [ { extractHBaseCells { mappings : [ { inputColumn : "cf:LOGSYFG" outputField : "LOGSYFG" type : string source : value }, { inputColumn : "cf:LOGIPAD" outputField : "LOGIPAD" type : string source : value }, { inputColumn : "cf:LOGSEQC" outputField : "LOGSEQC" type : string source : value }, { inputColumn : "cf:LOGLGDT" outputField : "LOGLGDT" type : string source : value }, { inputColumn : "cf:LOGLGTM" outputField : "LOGLGTM" type : string source : value } ] } } { logDebug { format : "output record: {}", args : ["@{}"] } } ] } ]
inputColumn:Hbase的CLOUMN
outputField:Solr的Schema.XML配置的fields
9.注冊Lily HBase Indexer configuration 和 Lily Hbase Indexer Service
hbase-indexer add-indexer \ --name cloudIndexer \ --indexer-conf /opt/cdhsolr/morphline-hbase-mapper.xml --connection-param solr.zk=cdh1:2181,cdh2:2181,cdh3:2181/solr \ --connection-param solr.collection=waslog \ --zookeeper cdh1:2181,cdh2:2181,cdh3:2181
驗證索引器是否成功創建
hbase-indexer list-indexers
10.測試put數據查看結果
當寫入數據后,稍過幾秒我們可以在相對於的solr中查詢到該插入的數據,表明配置已經成功。
11.使用IK分詞器
在/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF創建classes目錄
把IKAnalyzer.cfg.xml 和 stopword.dic添加到classes目錄
把IKAnalyzer2012FF_u1.jar添加到/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib目錄
在Schema.xml中添加
<!--配置IK分詞器-->
<fieldType name="text_ik" class="solr.TextField">
<!--索引時候的分詞器-->
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<!--查詢時候的分詞器-->
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
配置好后更新ZK配置文件,重啟solr服務
12,擴展命令
Scheme.xml新增索引字段
執行以下命令更新配置
solrctl instancedir --update waslog /opt/cdhsolr /waslog
solrctl collection --reload waslog
查看collection命令:solrctl collection –list
Hbase表數據到SOLR集群遷移
在CDH5.3.2中Hbase-indexer提供了MapReduce來批量構建索引的方式
/opt/cloudera/parcels/CDH-5.3.2-1.cdh5.3.2.p0.10/lib/hbase-solr/tools/hbase-indexer-mr-1.5-cdh5.3.2-job.jar
構建命令
hadoop jar /opt/cloudera/parcels/CDH-5.3.2-1.cdh5.3.2.p0.10/lib/hbase-solr/tools/hbase-indexer-mr-1.5-cdh5.3.2-job.jar D 'mapreduce.reduce.shuffle.memory.limit.percent=0.06' --hbase-indexer-file /opt/cdhsolr/mapping/waslog/morphline-hbase-mapper.xml --zk-host hadoop03:2181,hadoop04:2181,hadoop05:2181/solr --collection waslog --go-live
注意:在運行命令的目錄下必須有morphlines.conf文件
文章地址:http://www.cnblogs.com/thinkpad/p/5534627.html