大數(shù)據(jù)培訓_基于solr的Hbase秒級查詢方案
簡單介紹簡單的說,以下是課堂小結
Hbase提供大數(shù)據(jù)的存儲
Solr 提供全文搜索功能,提高高效的索引查詢
Hbase+solr(提供高效的全文搜索的大數(shù)據(jù)存儲解決方案)
項目背景某移動項目中采用Hbase來存儲用戶終端明細數(shù)據(jù),供前臺頁面即時查詢。Hbase無可置疑擁有其優(yōu)勢,但其本身只對rowkey支持毫秒級的快速檢索,對于多字段的組合查詢卻無能為力。針對Hbase的多條件查詢也有多種方案,但是這些方案要么太復雜,要么效率太低,本文只對基于Solr的Hbase多條件查詢方案進行測試和驗證。
原理基于Solr的Hbase多條件查詢原理很簡單,將Hbase表中涉及條件過濾的字段和rowkey在Solr中建立索引,通過Solr的多條件查詢快速獲得符合過濾條件的rowkey值,拿到這些rowkey之后在Hbase中通過指定rowkey進行查詢。
?
Solr介紹Solr是apache旗下基于lucene的一個完整的搜索服務。Solr主要包括兩部分核心組件:索引組件和搜索組件。索引組件用于將需要索引的數(shù)據(jù)在搜索程序中建立索引,而搜索組件用于響應客戶端的請求來查詢索引。Solr是一個高性能,采用Java5開發(fā),基于Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更為豐富的查詢語言,同時實現(xiàn)了可配置、可擴展并對查詢性能進行了優(yōu)化,并且提供了一個完善的功能管理界面,是一款非常優(yōu)秀的全文搜索引擎。文檔通過Http利用XML加到一個搜索集合中。查詢該集合也是通過http收到一個XML/JSON響應來實現(xiàn)。它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,高亮顯示搜索結果,通過索引復制來提高可用性,提供一套強大Data Schema來定義字段,類型和設置文本分析,提供基于Web的管理界面等。
Hbase介紹Hbase是Hadoop家族針對海量數(shù)據(jù)的分布式存儲方案,當我們通過rowkey對存于Hbase中的海量數(shù)據(jù)進行查詢時可以達到秒級的響應,實現(xiàn)比較理想的用戶體驗。但是,當在比較復雜的場景下,如需要對數(shù)據(jù)做多條件查詢時,Hbase提供的解決方案都不是很理想。
針對多條件查詢,Hbase本身現(xiàn)階段有兩種比較主流的解決方案:
1、通過協(xié)處理器在插入數(shù)據(jù)時手動建索引表
Hbase中的協(xié)處理器有兩種:Observer和Endpoint。Observer類似于關系型數(shù)據(jù)庫中的觸發(fā)器,Endpoint類似于關系型數(shù)據(jù)庫中的存儲過程。
我們在利用協(xié)處理器建索引表時使用的是Observer,即在往Hbase表中插入數(shù)據(jù)時,加入Observer操作,讓每插入一條數(shù)據(jù)前都調(diào)用我們自定義的業(yè)務邏輯在索引表中生成需要索引字段的記錄。
這樣在我們針對Hbase進行多條件查詢時,我們的查詢操作分成兩步:第一步首先根據(jù)查詢條件在索引表進行查詢,查詢對應結果的rowkey,第二步再根據(jù)rowkey去主表查詢我們需要的數(shù)據(jù)。
總結結合Solr索引可以很好的實現(xiàn)Hbase的多條件查詢,同時還能解決其兩個難點:分頁查詢、數(shù)據(jù)總量統(tǒng)計。實際場景中大多都是分頁查詢,分頁查詢返回的數(shù)據(jù)量很少,采用此種方案完全可以達到前端頁面毫秒級的實時響應;若有大批量的數(shù)據(jù)交互,比如涉及到數(shù)據(jù)導出,實際上效率也是很高,十萬數(shù)據(jù)僅耗時10秒