CDH版本Hbase二級索引方案Solr key value index


 

概述

在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM