Solr與HBase架構設計

jopen 10年前發布 | 69K 次閱讀 Solr HBase 搜索引擎

摘要:本篇是本人在做一個大數據項目,對于系統架構的一點總結,如何在保證存儲量的情況下,又能保證數據的檢索速度

前提:      Solr、SolrCloud提供了一整套的數據檢索方案,HBase提供了完善的大數據存儲機制。
需求:      1、對于添加到HBase中的結構化數據,能夠檢索出來。

            2、數據量較大,達到10億,100億數據量
            3、檢索的實時性要求較高,秒級更新
說明:      以下是使用Solr和HBase共同搭建的系統架構

</div>

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的使用方法、性能對比所示。http://www.cnblogs.com/wgp13x/p/3742653.html http://www.cnblogs.com/wgp13x/p/3748764.html

 

2、觸發器發送數據到RabbitMQSolr端從RabbitMQ獲取數據建索引。

embedded方式官方不推薦使用。而使用ConcurrentUpdateSolrServer性能與上種方式并無區別。

 

3、 建議:

HBase中只存儲1列,存儲值為PBJson串。(存在由beanSolrInputDocument轉化的類及annotation,以及各自的壓縮算法

或者:插入HBase的數據均以Bytes.toBytes(String)類型存儲,如long型數值2存儲為Bytes.toBytes(""+2)。否則在postPut()中需要知道每列的具體類型才能生成正確的SolrInputDocument,因為SolrInputDocument中需要的是String類型的數據。

具體的postPut方法代碼,如有需要可以留言或直接跟本人聯系。http://www.cnblogs.com/wgp13x/

 

1.3  HBaseSolr系統架構設計

使用HBase搭建結構數據存儲云,用來存儲海量數據;使用SolrCloud集群用來搭建搜索引擎,將要查找的結構化數據的ID查找出來,只配置它存儲ID。   

  Solr與HBase架構設計

1、具體流程:

wd代表用戶write data寫數據,從用戶提交寫數據請求wd1開始,經歷wd2,寫入MySQL數據庫,或寫入結構數據存儲云中,wd3,提交到Solr集群中,從而依據業務需求創建索引。

       rd代表用戶read data讀數據,從用戶提交讀數據請求rd1開始,經歷rd2,直接讀取MySQL中數據,或向Solr集群請求搜索服務,rd3,向Solr集群請求得到的搜索結果為ID,再向結構數據存儲云中通過ID取出數據,最后返回給用戶結果。


 

作者:Angel 
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!