柏雪(桂林理工大學圖書館,廣西桂林541004)
?
基于Hadoop的分布式搜索引擎設計與實現*
柏雪
(桂林理工大學圖書館,廣西桂林541004)
[摘要]針對分布式搜索引擎的研究現狀和技術背景進行分析,提出基于Hadoop的分布式Lucene搜索引擎的功能模型與系統構架。從系統實現的分布式索引、分布式檢索和第三方分詞器3個方面的關鍵技術進行詳細敘述,搭建具體實驗實施的軟件、硬件環境,并運用對比的方法,進行分布式搜索引擎的性能測試分析。實驗結果表明:基于Ha?doop的分布式Lucene搜索引擎,在信息搜索的效率、可靠性、穩定性和可擴展性等方面,具有很強的優勢。
[關鍵詞]分布式Hadoop Lucene搜索引擎
[分類號]TP393
*本文系2015年度廣西教育廳項目“隨書光盤資源云服務平臺開發應用研究”(項目編號:KY2015YB138);2013年度廣西哲學社會科學規劃研究課題基金項目“基于HADOOP大數據技術分布式信息檢索系統的研究與實現”(項目編號:13FTQ003)階段性成果。
中國互聯網絡信息中心(CNNIC)的中國網民搜索行為研究報告指出,現今我國的搜索引擎用戶規模達4.9億。搜索引擎作為互聯網的基礎應用,已成為廣大用戶獲取信息的重要工具。搜索引擎是指為用戶提供檢索服務,并將與檢索信息相關的結果顯示給用戶的系統,即用戶按照一定的策略使用網頁抓取程序從互聯網中采集信息,然后其進行分類組織和處理,用戶僅需提交檢索關鍵詞等信息即可進行檢索。搜索引擎能很好地解決用戶對需要的數據資源進行快速且準確的檢索,減小開發成本,提升信息服務的效益,提高信息資源的利用效率[1]。
然而,目前大部分查詢檢索系統是建立在數據庫系統自帶的查詢命令基礎上的,當數據量很大時,查詢的響應效率會大幅下降,如何建設一個高效、有針對性的通用搜索引擎,是一個亟待解決的問題。筆者結合Hadoop[2]分布式平臺的高可靠性、高可擴展性、高效性、高容錯性,以及Lucene全文檢索引擎的框架層次分明、應用程序接口簡單、功能強大、可擴展性強的優勢,設計一種基于Hadoop的分布式Lucene搜索引擎,并應用到館內隨書光盤應用服務系統,效果良好。
2.1國內外研究現狀
關于搜索引擎的研究早在2000年就已經起步,一經提出,就迅速成為研究熱點。搜索引擎分類方法有很多種[3],按運行機制分有集中式搜索引擎、分布式搜索引擎、代理搜索引擎等;按應用范圍分有綜合搜索引擎、垂直搜索引擎等。
國外關于搜索引擎的研究起步早、起點高、功能強大、系統完善,其中比較有代表性的有:①Elsevier公司開發的Sci?rus系統(學術信息搜索引擎),Scirus收錄與科技相關的網站超過1.05億個,包括9000萬個網頁,以及1700萬個來自其他信息源的記錄。②Melodis公司開發的Midomi系統(語音搜索引擎),采用了哼唱搜索技術,用戶只需唱歌、哼歌(或者吹口哨)就可以方便地通過數據庫檢索到匹配的樂曲。③Zil?low系統(房地產垂直搜索引擎),免費向用戶提供地產評估服務的房地產信息查詢,用戶可以通過衛星地圖來查詢目標,也可以使用郵編和街道地址進行搜索。
國內搜索引擎的研究起步則相對較晚,2005年之后才逐漸開始。近年來發展迅速,在旅游、求職、購物、家電、建材、家居、醫療健康、視頻等各個領域都有所發展。如淘寶網推出購物搜索引擎——“一淘”,優酷推出視頻搜索引擎——“搜庫”等。搜索引擎的發展,也正向細分化、行業化的方向迅速發展,但所涉及的領域范圍仍比較小,且在資源共享、接口開放、數據挖掘等技術層面與國外的研究還有很大差距。
2.2MapReduce編程模型
筆者的相關研究,需要使用Hadoop平臺的MapReduce編程模型[4],故在此單獨進行描述。MapReduce是一種數據處理的分布式編程模型,它在互聯網應用、科學數據處理、商業智能數據分析等具有海量數據需求的領域,應用得越來越廣泛。Hadoop可以運行各種語言編寫的MapReduce程序,其在大規模數據集的處理方面具有絕對優勢。MapReduce借鑒了Lisp函數式語言中的思想,用Map和Reduce兩個函數提供高層的并行編程抽象模型和接口,其采用的是分而治之的處理思想和策略。MapReduce以數據為中心,把數據分割成小塊供集群中的計算機分別計算,而后對計算結果進行匯總得出最終結論。MapReduce模型的輸入和輸出均為< key,value>集合,利用Map函數和Reduce函數處理數據,Map函數將一組
2.3Lucene搜索引擎
Lucene是Apache基金會研發的一個高度優化的開源全文搜索引擎工具包,雖然它并不是一個完整的搜索應用程序,但是它專注于文本的索引和搜索,提供了完整的索引引擎、查詢引擎以及部分的文本分析引擎[5-6],并且為數據訪問和管理提供簡單的函數調用接口[7],因此能夠方便地在此基礎上進行研究和二次開發。該搜索引擎包含兩個核心部分,即索引模塊和搜索模塊。當工作的準備階段,需要對來自于Web、文件、數據庫等數據源的結構化和非結構化數據進行文本提取將其轉換成文本數據流;當文本數據流送入搜索模塊時,調用文本分析工具對其進行分詞,生成索引文件;當客戶端提交查詢關鍵字后,搜索模塊調用文本分析工具對關鍵詞進行分詞,并生成數個或關系的查詢請求,通過訪問索引文件進行查詢,返回滿足查詢條件的經過相關度排序的命中結果集。
3.1功能模型
分布式搜索引擎的設計目標是實現海量信息資源快速的、精確的分布式檢索[8],該模型的功能主要包括:文本提取、分布式索引、分詞、分布式檢索、用戶界面5個部分組成。其具體功能模型,如圖1所示。

圖1 分布式搜索引擎的功能模型
①文本提?。簩崿F各種格式數據的預處理。由于Lucene只能處理文本文件,所以需要實現從HTML文件和非HTML文件(如數據庫、PDF、Word、Excel、E-mail等)中提取文本的功能。
②分布式索引:實現索引的創建、更新、刪除、優化和修復功能。搜索引擎建立在Hadoop分布式系統上,所以要考慮Lucene索引的分布式實現,需要重寫接口和考慮索引的分布式存儲和分發問題。
③分詞器模塊:針對中文,因為中文文本中詞和詞之間并不像英文那樣存在著天然的分隔符,所以需要分詞程序來解決中文分詞準確度問題。
④分布式檢索:首先對用戶輸入的關鍵詞進行簡單的合法性驗證,然后進行分布式檢索,對檢索的結果進行分類和排序。
⑤用戶界面:實現普通用戶、管理員用戶、服務提供者等,與相應的功能模塊進行功能對接。
3.2系統架構
基于Hadoop的分布式搜索引擎的系統構架,本質上是借鑒Hadoop的分布式基礎構架,并在此基礎上進行利用和改進。主要是將數據存儲在Hbase數據庫中,索引文件分布式存儲在集群中的HDFS分布式文件系統上,其具體的系統構架如圖2所示。

圖2 基于Hadoop的分布式搜索引擎系統構架
基本原理是:搜索引擎運行在Hadoop分布式集群上,當對源數據進行預處理時,需要將其從數據庫中取出,從中提取文本信息,然后將文本信息分布式存儲在HDFS上,利用索引MapReduce函數為這些源文件批量建立分布式倒排索引,倒排索引文件同樣存儲在HDFS上;當客戶端向NameNo?de提交檢索請求時,通過檢索MapReduce函數對索引文件進行分布式檢索從而快速檢索到用戶所需要的數據然后返回給客戶端[9]。
由信息存在諸多不同的格式,如HTML、Word、PDF、E-mail等,甚至有些信息形式是專有的,所需要檢索的數據源既有結構化的,也有非結構化的,為了方便讀寫大數據內容,需將源數據存儲在Hbase數據庫中,生成的索引文件存儲在HDFS分布式文件系統上。同時,需要注意的是Lucene只提供了一個通用的結構(Document對象)來接受索引的輸入,所以,需要設計相應的解析轉換函數,將數據庫中Word文檔、PDF文檔、HTML文檔等數據源構造成Lucene所支持的Document對象。
4.1分布式索引
就集中式索引而言,當索引的數量太大時,索引更新和搜索效率會非常低。而基于Hadoop的分布式Lucene搜索引擎可以很好地解決這一問題。它利用MapReduce函數為經過文本提取模塊所提取出的Document文檔建立倒排索引。由于Lucene中的Document并不支持MapReduce輸出類型的Writable接口,無法直接使用Document作為MapReduce的輸出類型。所以,需要自定義了一個HDFSDocument類,來實現在Hadoop上建立Lucene索引的功能。
采用倒排索引建立索引的過程為:①讀取數據,并對其進行解析,按照IndexMetaRule類所描述的Lucene的Docu?ment與Hbase的列的對應機制,將每個字段和值生成Field對象。②創建Document對象,并將生成的Field對象添加到Document中。③將文檔加入索引器IndexWriter,利用索引器IndexWriter中的addDocument方法將文檔加入索引器;利用DocumentWriter來完成索引的寫入。
筆者基于Hadoop的分布式Lucene搜索引擎,對原有的索引方法進行了改進。Lucene中定義了抽象類Directory用于存儲索引,Directory包含RAMDirectory和FSDirectory兩個子類。RAMDirectory方式在內存中建立索引,寫入速度快效率高,但關機后索引會丟失,且由于受內存容量的限制,無法一次性對所有文件進行索引,需要分批進行;FSDirectory方式在硬盤目錄中創建索引文件,其優點是可以長期保存,缺點是需要與磁盤進行交互,頻繁地I/O操作會導致索引速度較慢。通過將這兩種方式相結合,先在內存中的RAMDirec?tory目錄中建立索引,當索引數達到最大值時,對內存進行刷新,將內存中的索引文件批量的寫入到磁盤中的FSDirec?tory目錄中,這樣既能夠對索引進行長期存儲,又能夠大大減少對磁盤的訪問,從而提高索引效率。
4.2分布式檢索
分布式檢索模塊中的檢索方法,與在單機上用Lucene進行檢索的方法基本相同。不同點在于傳統的搜索引擎在檢索時,使用的是FSDirectory類來構建IndexReader,而分布式檢索的過程,使用FSDirectory類,這個類封裝原有檢索類的方法,同時還支持HDFS系統。
分布式檢索步驟為:①用戶提交檢索詞,解析器QueryP?arser對檢索詞進行解析生成Query對象;②分別計算出每個檢索關鍵詞的文檔頻率DF和逆文檔頻率IDF;③根據IDF計算出其結果得分。這一步主要是由IndexSearcher來實現,但對IndexSearcher中的docFreq()和maxDoc()進行了繼承和覆蓋,返回值為DF和Document數量;④根據相關度排序算法將檢索結果集Hits進行歸并排序后顯示給用戶,并將結果寫入緩存系統中。
4.3分詞器工具包
Lucene自身提供的分詞器中支持中文分詞的有Standar?dAnalyzer分詞器和CJKAnalyzer分詞器。StandardAnalyzer分詞器將每個字作為一個詞,這樣會出現分出來的詞比較全面,但會產生大量的索引文件大大降低檢索速度;CJKAna?lyzer分詞器,按每兩個字進行切分,會造成分詞不準確問題。雖然這兩個分詞器都能實現基本的簡單分詞功能,但無法滿足分布式搜索引擎實現的功能[12]。
基于Hadoop的分布式搜索引擎使用的第三方分詞器工具包為mmseg4j。mmseg4j使用MMSeg算法是實現中文分詞,MMSeg的算法是基于正向最大匹配,且已實現了Lucene 的analyzer,其詞語的正確識別率達到了98.41%。同時,在文本的提取方面,分布式搜索引擎使用Apache POI工具包實現Word、Excel、Powerpoint格式的文本提取,利用PDFBox工具包提取PDF格式的文檔文本,運用JTidy工具包來對HTML進行文本提取。
5.1實驗硬件與軟件環境設置
基于Hadoop的分布式搜索引擎的實驗搭建環境為8臺PC機:其中1臺為NameNode和MapReduce編程模型的Job?Tracke;1臺為SecondaryNameNode,6臺作為DataNode和Ma?pReduce編程模型中的TaskTracker;同時,還配備了1臺集中式的專業存儲陣列,進行性能對比測試。涉及兩個不同的硬件存儲設備,其具體的參數如表1所示。
選取數據測試的軟件環境為:
應用服務系統名稱:CDBOOK隨書光盤管理系統;網址:http://202.193.80.185;數據總量:5TB;光盤總數:14378種;網站訪問量:483643人次;下載總量:4250534次。
5.2網絡拓撲結構
應用平臺的軟硬件環境的網絡拓撲結構,如圖3所示。

圖3 網絡拓撲結構
5.3測試分析與實驗結論
實驗的硬件與軟件環境搭建完成后,分別用5TB的隨書光盤數據對專用存儲上的集中式搜索和多臺PC組成的Ha?doop集群上的分布式搜索引擎之間的文件處理性能進行對比測試[13]。在測試的過程中,同時依次啟動Hadoop集群的5個節點、6個節點和7個節點。其性能測試的結果如圖4所示。

圖4 分布式搜索引擎與集中式搜索檢索性能對比
實驗結論[14]:
①基于Hadoop的分布式搜索引擎在檢索數據的過程中,啟動不同的節點,或集群中有某個節點失效時,分布式的搜索引擎仍可以穩定地進行數據處理,這說明分布式的搜索引擎具有很高的可靠性能和穩定性能。同時,該搜索引擎也具有高可擴展性,集群可以很方便地進行節點擴展。
②當文件搜索的數據量較少時,分布式搜索引擎幾乎和集中式搜索引擎性能幾乎一樣,甚至集中式要比分布式速度更快一些,這是由于分布式需要進行數據分塊且節點間進行通信也需要耗費時間。但隨著數據量的增加,分布式的優勢逐漸顯現出來,且數量級越大、分布的節點越多,分布式搜索引擎的性能優勢也就越明顯。特別是當文件量達到一定數量級時,單機的集中式檢索會出現性能瓶頸,但對于分布式檢索依然可以穩定運行,而且節點數量越多,數據處理速度越快。
筆者建立的基于Hadoop的分布式Lucene搜索引擎,實現了圖書館隨書光盤的高效、快速、精準、穩定的分布式搜索,大大提升了用戶的應用體驗,提高了信息服務的水平和質量。同時,該分布式的搜索引擎具有很好的二次開發和應用性;其自身搜索的可靠性、穩定性、可擴展、分布式等特點,也使得該引擎能很好地在其他應用服務系統的搜索中使用,并進行再開發與再移植,有很廣闊的應用前景。
參考文獻:
[1]張偉哲,等.分布式搜索引擎系統效能建模與評價[J].軟件學報,2012(2):253-265.
[2]陳嘉恒.Hadoop實戰[M].北京:機械工業出版社,2011.
[3]印鑒,鄒勝.一種分布式搜索引擎設計[J].計算機科學,2001(10):74-77.
[4]Apache Hadoop[EB/OL]http://hadoop.apache.org/.
[5]Liu Chun,Guo Qing Ping.Analysis and Research of Web Chinese Retrieval System Based Lucene[J].Computer soci?ety,2009(12):1051-1055.
[6]Zhang Yong,Li Jian- lin.Research and Improvement of Search Engine Based on Lucene[C]∥International Confer?ence on Intelligent Human-Machine Systems and Cyber?netics.Zhejiang:[s.n.],2009:270-273.
[7]管建和,甘劍峰.基于Lucene全文檢索引擎的應用研究與實現[J].計算機工程與設計,2007(2):12-16.
[8]夏敏捷,李娟.基于Lucene的電子文件全文檢索系統研究[J].蘭臺世界,2015(3):25-26.
[9]陳艷春,李雙平.基于Lucene的企業級搜索引擎的設計與實現[J].現代圖書情報技術,2007(8):63-66.
[10]曹強.基于Lucene的Web站點站內全文檢索系統的設計與實現[J].圖書情報工作,2007(9):124-144.
[11]姚樹宇,趙少東.一種使用分布式技術的搜索引擎[J].計算機應用與軟件,2005(10):127-129.
[12]周敬才,胡華平,岳虹.基于Lucene的全文檢索系統的設計與實現[J].計算機工程與科學.2015(2):252-256.
[13]夏天,等.Lucene全文檢索軟件及其在學科信息服務平臺中的應用[J].圖書情報工作,2011(11):106-109,87.
[14]彭哲,陳敬文.Lucene全文檢索的應用及檢索效率測試研究[J].圖書館雜志,2009(8):63-67.
柏雪1988年生。研究方向:分布式檢索、云計算。
收稿日期:(2015-12-10;責編:姚雪梅。)