柏雪(桂林理工大學(xué)圖書館,廣西桂林541004)
?
基于Hadoop的分布式搜索引擎設(shè)計與實現(xiàn)*
柏雪
(桂林理工大學(xué)圖書館,廣西桂林541004)
[摘要]針對分布式搜索引擎的研究現(xiàn)狀和技術(shù)背景進(jìn)行分析,提出基于Hadoop的分布式Lucene搜索引擎的功能模型與系統(tǒng)構(gòu)架。從系統(tǒng)實現(xiàn)的分布式索引、分布式檢索和第三方分詞器3個方面的關(guān)鍵技術(shù)進(jìn)行詳細(xì)敘述,搭建具體實驗實施的軟件、硬件環(huán)境,并運(yùn)用對比的方法,進(jìn)行分布式搜索引擎的性能測試分析。實驗結(jié)果表明:基于Ha?doop的分布式Lucene搜索引擎,在信息搜索的效率、可靠性、穩(wěn)定性和可擴(kuò)展性等方面,具有很強(qiáng)的優(yōu)勢。
[關(guān)鍵詞]分布式Hadoop Lucene搜索引擎
[分類號]TP393
*本文系2015年度廣西教育廳項目“隨書光盤資源云服務(wù)平臺開發(fā)應(yīng)用研究”(項目編號:KY2015YB138);2013年度廣西哲學(xué)社會科學(xué)規(guī)劃研究課題基金項目“基于HADOOP大數(shù)據(jù)技術(shù)分布式信息檢索系統(tǒng)的研究與實現(xiàn)”(項目編號:13FTQ003)階段性成果。
中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)的中國網(wǎng)民搜索行為研究報告指出,現(xiàn)今我國的搜索引擎用戶規(guī)模達(dá)4.9億。搜索引擎作為互聯(lián)網(wǎng)的基礎(chǔ)應(yīng)用,已成為廣大用戶獲取信息的重要工具。搜索引擎是指為用戶提供檢索服務(wù),并將與檢索信息相關(guān)的結(jié)果顯示給用戶的系統(tǒng),即用戶按照一定的策略使用網(wǎng)頁抓取程序從互聯(lián)網(wǎng)中采集信息,然后其進(jìn)行分類組織和處理,用戶僅需提交檢索關(guān)鍵詞等信息即可進(jìn)行檢索。搜索引擎能很好地解決用戶對需要的數(shù)據(jù)資源進(jìn)行快速且準(zhǔn)確的檢索,減小開發(fā)成本,提升信息服務(wù)的效益,提高信息資源的利用效率[1]。
然而,目前大部分查詢檢索系統(tǒng)是建立在數(shù)據(jù)庫系統(tǒng)自帶的查詢命令基礎(chǔ)上的,當(dāng)數(shù)據(jù)量很大時,查詢的響應(yīng)效率會大幅下降,如何建設(shè)一個高效、有針對性的通用搜索引擎,是一個亟待解決的問題。筆者結(jié)合Hadoop[2]分布式平臺的高可靠性、高可擴(kuò)展性、高效性、高容錯性,以及Lucene全文檢索引擎的框架層次分明、應(yīng)用程序接口簡單、功能強(qiáng)大、可擴(kuò)展性強(qiáng)的優(yōu)勢,設(shè)計一種基于Hadoop的分布式Lucene搜索引擎,并應(yīng)用到館內(nèi)隨書光盤應(yīng)用服務(wù)系統(tǒng),效果良好。
2.1國內(nèi)外研究現(xiàn)狀
關(guān)于搜索引擎的研究早在2000年就已經(jīng)起步,一經(jīng)提出,就迅速成為研究熱點。搜索引擎分類方法有很多種[3],按運(yùn)行機(jī)制分有集中式搜索引擎、分布式搜索引擎、代理搜索引擎等;按應(yīng)用范圍分有綜合搜索引擎、垂直搜索引擎等。
國外關(guān)于搜索引擎的研究起步早、起點高、功能強(qiáng)大、系統(tǒng)完善,其中比較有代表性的有:①Elsevier公司開發(fā)的Sci?rus系統(tǒng)(學(xué)術(shù)信息搜索引擎),Scirus收錄與科技相關(guān)的網(wǎng)站超過1.05億個,包括9000萬個網(wǎng)頁,以及1700萬個來自其他信息源的記錄。②Melodis公司開發(fā)的Midomi系統(tǒng)(語音搜索引擎),采用了哼唱搜索技術(shù),用戶只需唱歌、哼歌(或者吹口哨)就可以方便地通過數(shù)據(jù)庫檢索到匹配的樂曲。③Zil?low系統(tǒng)(房地產(chǎn)垂直搜索引擎),免費(fèi)向用戶提供地產(chǎn)評估服務(wù)的房地產(chǎn)信息查詢,用戶可以通過衛(wèi)星地圖來查詢目標(biāo),也可以使用郵編和街道地址進(jìn)行搜索。
國內(nèi)搜索引擎的研究起步則相對較晚,2005年之后才逐漸開始。近年來發(fā)展迅速,在旅游、求職、購物、家電、建材、家居、醫(yī)療健康、視頻等各個領(lǐng)域都有所發(fā)展。如淘寶網(wǎng)推出購物搜索引擎——“一淘”,優(yōu)酷推出視頻搜索引擎——“搜庫”等。搜索引擎的發(fā)展,也正向細(xì)分化、行業(yè)化的方向迅速發(fā)展,但所涉及的領(lǐng)域范圍仍比較小,且在資源共享、接口開放、數(shù)據(jù)挖掘等技術(shù)層面與國外的研究還有很大差距。
2.2MapReduce編程模型
筆者的相關(guān)研究,需要使用Hadoop平臺的MapReduce編程模型[4],故在此單獨(dú)進(jìn)行描述。MapReduce是一種數(shù)據(jù)處理的分布式編程模型,它在互聯(lián)網(wǎng)應(yīng)用、科學(xué)數(shù)據(jù)處理、商業(yè)智能數(shù)據(jù)分析等具有海量數(shù)據(jù)需求的領(lǐng)域,應(yīng)用得越來越廣泛。Hadoop可以運(yùn)行各種語言編寫的MapReduce程序,其在大規(guī)模數(shù)據(jù)集的處理方面具有絕對優(yōu)勢。MapReduce借鑒了Lisp函數(shù)式語言中的思想,用Map和Reduce兩個函數(shù)提供高層的并行編程抽象模型和接口,其采用的是分而治之的處理思想和策略。MapReduce以數(shù)據(jù)為中心,把數(shù)據(jù)分割成小塊供集群中的計算機(jī)分別計算,而后對計算結(jié)果進(jìn)行匯總得出最終結(jié)論。MapReduce模型的輸入和輸出均為< key,value>集合,利用Map函數(shù)和Reduce函數(shù)處理數(shù)據(jù),Map函數(shù)將一組
2.3Lucene搜索引擎
Lucene是Apache基金會研發(fā)的一個高度優(yōu)化的開源全文搜索引擎工具包,雖然它并不是一個完整的搜索應(yīng)用程序,但是它專注于文本的索引和搜索,提供了完整的索引引擎、查詢引擎以及部分的文本分析引擎[5-6],并且為數(shù)據(jù)訪問和管理提供簡單的函數(shù)調(diào)用接口[7],因此能夠方便地在此基礎(chǔ)上進(jìn)行研究和二次開發(fā)。該搜索引擎包含兩個核心部分,即索引模塊和搜索模塊。當(dāng)工作的準(zhǔn)備階段,需要對來自于Web、文件、數(shù)據(jù)庫等數(shù)據(jù)源的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行文本提取將其轉(zhuǎn)換成文本數(shù)據(jù)流;當(dāng)文本數(shù)據(jù)流送入搜索模塊時,調(diào)用文本分析工具對其進(jìn)行分詞,生成索引文件;當(dāng)客戶端提交查詢關(guān)鍵字后,搜索模塊調(diào)用文本分析工具對關(guān)鍵詞進(jìn)行分詞,并生成數(shù)個或關(guān)系的查詢請求,通過訪問索引文件進(jìn)行查詢,返回滿足查詢條件的經(jīng)過相關(guān)度排序的命中結(jié)果集。
3.1功能模型
分布式搜索引擎的設(shè)計目標(biāo)是實現(xiàn)海量信息資源快速的、精確的分布式檢索[8],該模型的功能主要包括:文本提取、分布式索引、分詞、分布式檢索、用戶界面5個部分組成。其具體功能模型,如圖1所示。
圖1 分布式搜索引擎的功能模型
①文本提?。簩崿F(xiàn)各種格式數(shù)據(jù)的預(yù)處理。由于Lucene只能處理文本文件,所以需要實現(xiàn)從HTML文件和非HTML文件(如數(shù)據(jù)庫、PDF、Word、Excel、E-mail等)中提取文本的功能。
②分布式索引:實現(xiàn)索引的創(chuàng)建、更新、刪除、優(yōu)化和修復(fù)功能。搜索引擎建立在Hadoop分布式系統(tǒng)上,所以要考慮Lucene索引的分布式實現(xiàn),需要重寫接口和考慮索引的分布式存儲和分發(fā)問題。
③分詞器模塊:針對中文,因為中文文本中詞和詞之間并不像英文那樣存在著天然的分隔符,所以需要分詞程序來解決中文分詞準(zhǔn)確度問題。
④分布式檢索:首先對用戶輸入的關(guān)鍵詞進(jìn)行簡單的合法性驗證,然后進(jìn)行分布式檢索,對檢索的結(jié)果進(jìn)行分類和排序。
⑤用戶界面:實現(xiàn)普通用戶、管理員用戶、服務(wù)提供者等,與相應(yīng)的功能模塊進(jìn)行功能對接。
3.2系統(tǒng)架構(gòu)
基于Hadoop的分布式搜索引擎的系統(tǒng)構(gòu)架,本質(zhì)上是借鑒Hadoop的分布式基礎(chǔ)構(gòu)架,并在此基礎(chǔ)上進(jìn)行利用和改進(jìn)。主要是將數(shù)據(jù)存儲在Hbase數(shù)據(jù)庫中,索引文件分布式存儲在集群中的HDFS分布式文件系統(tǒng)上,其具體的系統(tǒng)構(gòu)架如圖2所示。
圖2 基于Hadoop的分布式搜索引擎系統(tǒng)構(gòu)架
基本原理是:搜索引擎運(yùn)行在Hadoop分布式集群上,當(dāng)對源數(shù)據(jù)進(jìn)行預(yù)處理時,需要將其從數(shù)據(jù)庫中取出,從中提取文本信息,然后將文本信息分布式存儲在HDFS上,利用索引MapReduce函數(shù)為這些源文件批量建立分布式倒排索引,倒排索引文件同樣存儲在HDFS上;當(dāng)客戶端向NameNo?de提交檢索請求時,通過檢索MapReduce函數(shù)對索引文件進(jìn)行分布式檢索從而快速檢索到用戶所需要的數(shù)據(jù)然后返回給客戶端[9]。
由信息存在諸多不同的格式,如HTML、Word、PDF、E-mail等,甚至有些信息形式是專有的,所需要檢索的數(shù)據(jù)源既有結(jié)構(gòu)化的,也有非結(jié)構(gòu)化的,為了方便讀寫大數(shù)據(jù)內(nèi)容,需將源數(shù)據(jù)存儲在Hbase數(shù)據(jù)庫中,生成的索引文件存儲在HDFS分布式文件系統(tǒng)上。同時,需要注意的是Lucene只提供了一個通用的結(jié)構(gòu)(Document對象)來接受索引的輸入,所以,需要設(shè)計相應(yīng)的解析轉(zhuǎn)換函數(shù),將數(shù)據(jù)庫中Word文檔、PDF文檔、HTML文檔等數(shù)據(jù)源構(gòu)造成Lucene所支持的Document對象。
4.1分布式索引
就集中式索引而言,當(dāng)索引的數(shù)量太大時,索引更新和搜索效率會非常低。而基于Hadoop的分布式Lucene搜索引擎可以很好地解決這一問題。它利用MapReduce函數(shù)為經(jīng)過文本提取模塊所提取出的Document文檔建立倒排索引。由于Lucene中的Document并不支持MapReduce輸出類型的Writable接口,無法直接使用Document作為MapReduce的輸出類型。所以,需要自定義了一個HDFSDocument類,來實現(xiàn)在Hadoop上建立Lucene索引的功能。
采用倒排索引建立索引的過程為:①讀取數(shù)據(jù),并對其進(jìn)行解析,按照IndexMetaRule類所描述的Lucene的Docu?ment與Hbase的列的對應(yīng)機(jī)制,將每個字段和值生成Field對象。②創(chuàng)建Document對象,并將生成的Field對象添加到Document中。③將文檔加入索引器IndexWriter,利用索引器IndexWriter中的addDocument方法將文檔加入索引器;利用DocumentWriter來完成索引的寫入。
筆者基于Hadoop的分布式Lucene搜索引擎,對原有的索引方法進(jìn)行了改進(jìn)。Lucene中定義了抽象類Directory用于存儲索引,Directory包含RAMDirectory和FSDirectory兩個子類。RAMDirectory方式在內(nèi)存中建立索引,寫入速度快效率高,但關(guān)機(jī)后索引會丟失,且由于受內(nèi)存容量的限制,無法一次性對所有文件進(jìn)行索引,需要分批進(jìn)行;FSDirectory方式在硬盤目錄中創(chuàng)建索引文件,其優(yōu)點是可以長期保存,缺點是需要與磁盤進(jìn)行交互,頻繁地I/O操作會導(dǎo)致索引速度較慢。通過將這兩種方式相結(jié)合,先在內(nèi)存中的RAMDirec?tory目錄中建立索引,當(dāng)索引數(shù)達(dá)到最大值時,對內(nèi)存進(jìn)行刷新,將內(nèi)存中的索引文件批量的寫入到磁盤中的FSDirec?tory目錄中,這樣既能夠?qū)λ饕M(jìn)行長期存儲,又能夠大大減少對磁盤的訪問,從而提高索引效率。
4.2分布式檢索
分布式檢索模塊中的檢索方法,與在單機(jī)上用Lucene進(jìn)行檢索的方法基本相同。不同點在于傳統(tǒng)的搜索引擎在檢索時,使用的是FSDirectory類來構(gòu)建IndexReader,而分布式檢索的過程,使用FSDirectory類,這個類封裝原有檢索類的方法,同時還支持HDFS系統(tǒng)。
分布式檢索步驟為:①用戶提交檢索詞,解析器QueryP?arser對檢索詞進(jìn)行解析生成Query對象;②分別計算出每個檢索關(guān)鍵詞的文檔頻率DF和逆文檔頻率IDF;③根據(jù)IDF計算出其結(jié)果得分。這一步主要是由IndexSearcher來實現(xiàn),但對IndexSearcher中的docFreq()和maxDoc()進(jìn)行了繼承和覆蓋,返回值為DF和Document數(shù)量;④根據(jù)相關(guān)度排序算法將檢索結(jié)果集Hits進(jìn)行歸并排序后顯示給用戶,并將結(jié)果寫入緩存系統(tǒng)中。
4.3分詞器工具包
Lucene自身提供的分詞器中支持中文分詞的有Standar?dAnalyzer分詞器和CJKAnalyzer分詞器。StandardAnalyzer分詞器將每個字作為一個詞,這樣會出現(xiàn)分出來的詞比較全面,但會產(chǎn)生大量的索引文件大大降低檢索速度;CJKAna?lyzer分詞器,按每兩個字進(jìn)行切分,會造成分詞不準(zhǔn)確問題。雖然這兩個分詞器都能實現(xiàn)基本的簡單分詞功能,但無法滿足分布式搜索引擎實現(xiàn)的功能[12]。
基于Hadoop的分布式搜索引擎使用的第三方分詞器工具包為mmseg4j。mmseg4j使用MMSeg算法是實現(xiàn)中文分詞,MMSeg的算法是基于正向最大匹配,且已實現(xiàn)了Lucene 的analyzer,其詞語的正確識別率達(dá)到了98.41%。同時,在文本的提取方面,分布式搜索引擎使用Apache POI工具包實現(xiàn)Word、Excel、Powerpoint格式的文本提取,利用PDFBox工具包提取PDF格式的文檔文本,運(yùn)用JTidy工具包來對HTML進(jìn)行文本提取。
5.1實驗硬件與軟件環(huán)境設(shè)置
基于Hadoop的分布式搜索引擎的實驗搭建環(huán)境為8臺PC機(jī):其中1臺為NameNode和MapReduce編程模型的Job?Tracke;1臺為SecondaryNameNode,6臺作為DataNode和Ma?pReduce編程模型中的TaskTracker;同時,還配備了1臺集中式的專業(yè)存儲陣列,進(jìn)行性能對比測試。涉及兩個不同的硬件存儲設(shè)備,其具體的參數(shù)如表1所示。
選取數(shù)據(jù)測試的軟件環(huán)境為:
應(yīng)用服務(wù)系統(tǒng)名稱:CDBOOK隨書光盤管理系統(tǒng);網(wǎng)址:http://202.193.80.185;數(shù)據(jù)總量:5TB;光盤總數(shù):14378種;網(wǎng)站訪問量:483643人次;下載總量:4250534次。
5.2網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
應(yīng)用平臺的軟硬件環(huán)境的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),如圖3所示。
圖3 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
5.3測試分析與實驗結(jié)論
實驗的硬件與軟件環(huán)境搭建完成后,分別用5TB的隨書光盤數(shù)據(jù)對專用存儲上的集中式搜索和多臺PC組成的Ha?doop集群上的分布式搜索引擎之間的文件處理性能進(jìn)行對比測試[13]。在測試的過程中,同時依次啟動Hadoop集群的5個節(jié)點、6個節(jié)點和7個節(jié)點。其性能測試的結(jié)果如圖4所示。
圖4 分布式搜索引擎與集中式搜索檢索性能對比
實驗結(jié)論[14]:
①基于Hadoop的分布式搜索引擎在檢索數(shù)據(jù)的過程中,啟動不同的節(jié)點,或集群中有某個節(jié)點失效時,分布式的搜索引擎仍可以穩(wěn)定地進(jìn)行數(shù)據(jù)處理,這說明分布式的搜索引擎具有很高的可靠性能和穩(wěn)定性能。同時,該搜索引擎也具有高可擴(kuò)展性,集群可以很方便地進(jìn)行節(jié)點擴(kuò)展。
②當(dāng)文件搜索的數(shù)據(jù)量較少時,分布式搜索引擎幾乎和集中式搜索引擎性能幾乎一樣,甚至集中式要比分布式速度更快一些,這是由于分布式需要進(jìn)行數(shù)據(jù)分塊且節(jié)點間進(jìn)行通信也需要耗費(fèi)時間。但隨著數(shù)據(jù)量的增加,分布式的優(yōu)勢逐漸顯現(xiàn)出來,且數(shù)量級越大、分布的節(jié)點越多,分布式搜索引擎的性能優(yōu)勢也就越明顯。特別是當(dāng)文件量達(dá)到一定數(shù)量級時,單機(jī)的集中式檢索會出現(xiàn)性能瓶頸,但對于分布式檢索依然可以穩(wěn)定運(yùn)行,而且節(jié)點數(shù)量越多,數(shù)據(jù)處理速度越快。
筆者建立的基于Hadoop的分布式Lucene搜索引擎,實現(xiàn)了圖書館隨書光盤的高效、快速、精準(zhǔn)、穩(wěn)定的分布式搜索,大大提升了用戶的應(yīng)用體驗,提高了信息服務(wù)的水平和質(zhì)量。同時,該分布式的搜索引擎具有很好的二次開發(fā)和應(yīng)用性;其自身搜索的可靠性、穩(wěn)定性、可擴(kuò)展、分布式等特點,也使得該引擎能很好地在其他應(yīng)用服務(wù)系統(tǒng)的搜索中使用,并進(jìn)行再開發(fā)與再移植,有很廣闊的應(yīng)用前景。
參考文獻(xiàn):
[1]張偉哲,等.分布式搜索引擎系統(tǒng)效能建模與評價[J].軟件學(xué)報,2012(2):253-265.
[2]陳嘉恒.Hadoop實戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2011.
[3]印鑒,鄒勝.一種分布式搜索引擎設(shè)計[J].計算機(jī)科學(xué),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全文檢索引擎的應(yīng)用研究與實現(xiàn)[J].計算機(jī)工程與設(shè)計,2007(2):12-16.
[8]夏敏捷,李娟.基于Lucene的電子文件全文檢索系統(tǒng)研究[J].蘭臺世界,2015(3):25-26.
[9]陳艷春,李雙平.基于Lucene的企業(yè)級搜索引擎的設(shè)計與實現(xiàn)[J].現(xiàn)代圖書情報技術(shù),2007(8):63-66.
[10]曹強(qiáng).基于Lucene的Web站點站內(nèi)全文檢索系統(tǒng)的設(shè)計與實現(xiàn)[J].圖書情報工作,2007(9):124-144.
[11]姚樹宇,趙少東.一種使用分布式技術(shù)的搜索引擎[J].計算機(jī)應(yīng)用與軟件,2005(10):127-129.
[12]周敬才,胡華平,岳虹.基于Lucene的全文檢索系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機(jī)工程與科學(xué).2015(2):252-256.
[13]夏天,等.Lucene全文檢索軟件及其在學(xué)科信息服務(wù)平臺中的應(yīng)用[J].圖書情報工作,2011(11):106-109,87.
[14]彭哲,陳敬文.Lucene全文檢索的應(yīng)用及檢索效率測試研究[J].圖書館雜志,2009(8):63-67.
柏雪1988年生。研究方向:分布式檢索、云計算。
收稿日期:(2015-12-10;責(zé)編:姚雪梅。)