陳棟波,高躍明
(1. 北京郵電大學 網絡與交換技術國家重點實驗室,北京 100876;2. 上海欣方智能系統有限公司北京分公司,北京 100085)
基于HBase的海量文件的檢索方案研究
陳棟波1,高躍明2
(1. 北京郵電大學 網絡與交換技術國家重點實驗室,北京 100876;2. 上海欣方智能系統有限公司北京分公司,北京 100085)
在互聯網(尤其是移動互聯網)、物聯網、云計算、大數據等高速發展的大背景下,數據呈現爆炸式地增長。這類數據不規則的特性決定了其無法再按照傳統基于屬性列的方式進行檢索,而是需要具備更加龐大的水平擴展性。使用NoSQL數據庫HBase和搜索引擎ElasticSearch相結合,通過對檢索方案進行設計,對關鍵字匹配、語意檢索、邏輯關系等檢索策略進行測試和分析,實現能夠快速、準確的適用于海量數據的檢索方案。
大數據;HBase;ElasticSearch;檢索方案
本文著錄格式:陳棟波,高躍. 基于HBase的海量文件的檢索方案研究[J]. 軟件,2016,37(11):88-92
在互聯網(尤其是移動互聯網)、物聯網、云計算、大數據等高速發展的大背景下,數據呈現爆炸式地增長。海量小文件的應用在生活中已越來越常見,不僅存儲容量巨大,而且數據類型繁多、數據大小變化幅度大、流動快等顯著特點,往往能夠產生千萬級、億級甚至十億、百億級的海量文件。隨著檢索數據的增加,檢索效率在減少。
傳統的結構化關系型數據庫管理中,數據的檢索往往是基于列的條件檢索。但是這類非結構化文檔數據不規則的特性決定了其無法再按照傳統基于屬性列的方式進行檢索,而是需要具備更加龐大的水平擴展性。NoSQL技術的出現,在一定程度上改變了這一狀況,使數據不必一定滿足關系型數據庫管理系統的需要。而使用搜索引擎對大數據的搜索更是使檢索更為方便。
基于以上的這種背景,對詞組搜索、詞組選擇、提供結果的相關度等檢索策略進行了研究,使用NoSQL數據庫HBase和搜索引擎ElasticSearch相結合,設計和實現了適用于海量文件的檢索方案:通過對檢索策略進行設計,(包括確定檢索的數據庫、檢索的用詞,并明確檢索詞之間的邏輯關系和查找步驟的科學安排),對關鍵字匹配、語意檢索、邏輯關系等檢索策略進行測試和分析,實現能夠快速、準確的海量數據的全文檢索方案。
HBase是hadoop系列的開源數據庫。Hadoop為大數據處理而生,天生就是處理大數據的利器,但是其所擅長的是離線出來數據。而當需要動態實
時的從海量數據中獲取信息時,就產生了HBase。HBase作為Google Bigtable的開源實現,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,與Hadoop的作業模式不同,HBase可用于存儲和處理半結構化的數據,且能夠將海量數據進行實時的處理,并動態的向用戶提供數據的存儲及讀寫服務。
但是隨著使用的需求越來越多,應用場景日益復雜,用戶對查詢方式的的要求變得越來復雜。在HBase HBase的設計中只有每行數據的row key作為數據檢索的唯一索引,這使得HBase在檢索方面有很多的限制,這就要求在設計表結構的時候要根據表的使用場景做額外的考慮,經常會遇到不得不進行全表掃描的查詢條件,這對于海量數據的表來說,完全是無法接受的災難。單一的按row key檢索數據的方式,無法再滿足更多應用的需求。現有的傳統的數據庫產品都有索引以及全文檢索的功能,而在HBase中至今沒有完整的解決方案。
關于HBase檢索的方案,最常見的方案是基于Lucene或者Solr使用MapReduce去創建索引,再提供搜索,這樣的方法是增量建立索引有困難,隨著數據增大,每一次建立索引的時間會非常長,最后變成一個不可能完成的任務。另一方面,該方式基本就是為不同的數據編寫不同的MapReduce任務,沒有通用性。還有就是將管理全部放在客戶端,比如Facebook的收件箱查詢,分詞的工作是由應用來完成,然后存儲在HBase中,但是該類設計并沒有通用性。還有一些嘗試是基于HBase coprocessor的并使用Lucene為HBase增加全文檢索功能。關于全文檢索的討論,基本上還是圍繞著Lucence使用或者Solr來進行,但是一直以來全文檢索也并未被社區重視,所以社區在這方面并沒有什么動作,但是隨著信息的增長,全文檢索的需求還是很旺盛的。
ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。ElasticSearch是用Java開發的,并作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
綜上所述,本方案中HBase的全文檢索功能將基于ElasticSearch實現,提供簡單靈活的索引定義方式。為了將索引建立方便地嵌入現有的HBase代碼中,將充分利用HBase的coprocessor框架的特點,將相關代碼填入到對應的鉤子函數中,這樣能夠大大減少對于源代碼的改動。
2.1 方案體系結構
方案的動態結構如圖2-1所示,在使用檢索功能前,應先使用數據庫同步模塊對數據庫發出讀取數據的請求,數據庫返回數據庫后再將其同步到ElasticSearch索引中。當檢索請求發出時,前端交互模塊將檢索信息和篩選信息發送到檢索處理模塊,分詞后,檢索處理模塊將推薦關鍵詞經由前端交互模塊返回給用戶。檢索處理模塊自行再使用檢索信息和篩選信息在ElasticSearch索引中進行檢索,并將檢索結果經由前端交互模塊返回給用戶。

圖2-1 檢索系統的動態結構
在整體框架中在系統內部大致可以分為三個模塊:信息輸入模塊、檢索處理模塊、數據庫同步。在整體架構中信息輸入模塊主要起控制器層的接受使用者的消息請求的功能,檢索處理模塊主要起處理檢索信息、實現檢索功能、返回檢索結果的功能,數據庫同步模塊主要起持久層作用,完成數據庫同
步工作:
1)前端交互模塊:
前端交互模塊主要實現界面功能,包括以下功能:
· 提供信息輸入的檢索框以及篩選內容的tag;
· 將檢索關鍵詞及篩選tag傳入檢索處理模塊進行處理;
· 在頁面上返回檢索處理模塊的檢索結果;
· 在頁面上返回檢索處理模塊的分詞結果作為檢索的推薦關鍵詞;
· 在頁面上點擊相應的檢索結果能返回看到該結果的全文信息。
2)檢索處理模塊:
檢索處理模塊是體現檢索子系統功能的主要模塊,包括以下兩個子模塊:
· 分詞子模塊:
分詞子模塊接受前端交互模塊輸入的字符串,使用ElasticSearch的API連接ElasticSearch的中的MMSeg4j分詞器和IKAnalyzer分詞器進行分詞處理,使得檢索結果更準確,同時將分詞結果傳入檢索子模塊和前端交互模塊。
· 檢索子模塊:
檢索子模塊中包括了邏輯檢索子模塊、關鍵詞檢索子模塊和語義檢索子模塊,通過檢索處理模塊中的分詞子模塊傳來的關鍵詞和前端交互模塊傳來的篩選信息分別實現邏輯檢索、關鍵詞檢索和語義檢索的功能,使用ElasticSearch的API對數據庫同步模塊形成的ElasticSearch索引進行檢索,對檢索結果按照相關性進行排序,并返回到前端交互模塊。
3)數據庫同步模塊:
由于數據存放在數據庫HBase中,在使用ElasticSearch進行檢索處理模塊進行檢索時,需要先對HBase中的數據進行同步。
· 對HBase中的數據進行同步。
· 在同步的過程中在ElasticSearch中建立索引,將HBase中的Rowkey保存為ElasticSearch中document的ID,將HBase中的column保存為ElasticSearch的field,將HBase中的表名保存為ElasticSearch中的type。
2.2 檢索功能的實現
檢索功能對關鍵詞匹配和語義檢索的具體實現如下圖2-2所示:

圖2-2 關鍵詞匹配和語義檢索的具體實現
kFrame.jsp將檢索關鍵詞輸入keyServlet中,而kSearchInfo.jsp、kSearchInfoCon.jsp、kSearchInfoTi. jsp、kSearchInfoAu.jsp的選擇將篩選關鍵詞輸入keyServlet,控制器keyServlet調用keyValueSearch中的searchResult()來返回關鍵詞檢索和模糊檢索后整合排序后的結果。search Result()需要實現檢索子系統的檢索策略:將檢索結果按優先匹配完整關鍵詞的結果,然后是分詞后匹配到分詞較多的檢索結果,接著是分詞后匹配到詞語較少的檢索結果和模糊匹配的結果,按相關度打分后的結果進行排序并去掉得分過低的結果。這一部分需要調用Elastic-Search的API getScore()完成。searchResult()調用keyValueSearch中的keySearch (String key, String Field)和fuzzySearch(String key, String field)來分別對ElasticSearch索引中的信息進行關鍵詞檢索和模糊檢索。keyServlet將檢索結果返回檢索請求輸入時對應的jsp中,每個結果分別對應一個鏈接顯示,并顯示前200字的預覽。
2.3 數據結構
本方案數據包括HBase數據庫表中的數據和ElasticSearch中索引中的數據,這些數據是用來檢索的信息。
2.3.1 數據庫表設計
HBase中的表Doc結構如表2-1所示。Doc表用來存儲原始的文檔信息,每行數據代表一個文檔,每個文檔在1 MB以下,整個表約有1200000條數據,整體大小約在1 TB左右,存儲在數據庫中。

表2-1 HBase的表Doc結構
在系統中,doc表的信息在數據庫同步模塊使用HBase API進行調用,將其寫入到ElasticSearch索引中。
2.3.2 ElasticSearch索引設計
ElasticSearch索引HBase如表2-2所示。索引名為HBase,由數據庫同步模塊HBase數據庫的Doc表寫入,因此索引中每個文檔也大多在1 MB以下,約有1200000個文檔,整個索引大小約為1 MB,通過ElasticSearch自動分片分發到每個節點上存儲。存儲的信息為用來檢索的文檔。

表2-2 ElasticSearch中的索引HBase
索引文件使用默認的hybrid mmap/nio fs來進行存儲。這種方式將映射的文件加載到虛擬地址空間。也就是在內存夠時將索引存在內存里,當內存不夠時使用虛擬地址映射到磁盤當中。并使用ElasticSearch的gateway功能的local gateway,也就是節點各自保存其狀態,節點直接從本地存儲來恢復節點狀態和索引信息。
索引文件由檢索處理模塊使用ElasticSearch API進行訪問,得出檢索結果返回到前端交互模塊。
2.3.3 檢索處理模塊數據結構
· 分詞子模塊的數據結構
keyServlet類

表2-3 keyServlet類的數據結構
analyze類

表2-4 analyze類的數據結構
2.2.4 檢索子模塊的數據結構keyValueSearch類

表2-5 keyValueSearch類的數據結構
logicSearch類

表2-6 logicSearch類的數據結構
結合ElasticSearch和HBase集群系統,對檢索方案的功能實現情況進行測試,如表3-1所示。

表3-1 測試硬件環境列表
在表3-2中同樣列出了軟件測試的軟件環境:

表3-2 測試軟件環境列表
如表3-3所示是測試檢索20次的響應時間(設定最多返回250條結果)。

表3-3 響應時間測試時間(單位ms)
由表3-3可看出,前面幾次響應時間比較長,最長達到了46433 ms,而到后面檢索時間逐漸穩定,幾乎都在3 s以內,查詢相關資料后是ElasticSearch最開始使用時需要加載field data、倒排索引等數據結構,需要較長的時間,在加載完成之后檢索時間就較為穩定了。
通過上述對于海量文件檢索方案的測試可以發現,在性能測試方面,當采集量達到一定的量,本系統的檢索的響應時間將維持在3 s以內,隨著時間和檢索次數的增加可能會繼續減少,而且準確率較高,即在系統運行正常時具有極高的可靠性。從而,從上述測試結果中可以得出結論,本方案基本符合需求和預期目標。
通過對海量文件檢索的現狀和問題進行分析,基于ElasticSearch實現了HBase的檢索功能,大大減少對于源代碼的改動。進行了檢索響應速度測試,得出較好的測試效果。在后續的開發中,將通過修改分詞器來提高檢索結果的準確率,進行深一步的研究和改進。
[1] 于天恩. Lucene搜索引擎開發權威經典[M]. 中國鐵道出版社, 2008.
[2] 王宏霞, 艾樹峰. 數字圖書館信息檢索技術的研究[J]. 浙江傳媒學院學報, 2007, 04: 69-71.
[3] 卓海藝. 基于HBase的海量數據實時查詢系統設計與實現[D]. 北京郵電大學. 2013.
[4] 陳洪猛. 全文檢索技術的研究與實現[D]. 北京工業大學, 2008.
[5] 楊小莉, 黃水清. 國內常見全文檢索系統比較[J]. 圖書與情報, 2006, 02: 94-96.
[6] (波)庫賽, (波)羅格辛斯基著, 蔡建斌譯. Elasticsearch服務器開發: 第2版[M]. 人民郵電出版社. 2015.
[7] 張建中, 黃艷飛, 熊擁軍. 基于ElasticSearch的數字圖書館檢索系統[J]. 計算機與現代化, 2015, 06: 69-73.
[8] 陳俊杰, 黃國凡. 應用Elasticsearch重構圖書館站內搜索引擎[J]. 情報探索, 2014, 11: 114-119.
Research on the Retrieval Scheme of Massive Data Based on HBase
CHEN Dong-bo1, GAO Yue-ming2
(1. State Key Laboratory of Networking and Switching Technology, Beijing university of posts and telecommunications, Beijing 100876, China; 2. Shanghai CINTel Intelligent Telecom System Co., Ltd Beijing, Beijing 100085, China)
With the developing of Internet (especially mobile Internet), Internet of things, cloud computing and big data,the information on the internet showing the situation of the “explosive” growth. The irregular characteristics of data can not be searched through the traditional way of attribute based retrieval. This need to have a more extensive level of scalability. By combine NoSQL database HBase and search engine ElasticSearch, can quickly and accurately the massive data to achieve the retrieval subsystem.
Big data; Hbase; ElasticSearch; Retrieval scheme
TP391.1
A
10.3969/j.issn.1003-6970.2016.11.019
陳棟波(1991-),男,碩士研究生,主要研究方向:網絡技術研究與應用。高躍明(1985-),男,上海欣方智能系統有限公司北京分公司(北京郵電大學產學研基地)數據業務部副經理,主要研究方向:電信增值業務及通信軟件。