引言
隨著信息化的不斷深入,互聯網飛速發展,傳統的集中式搜索引擎難以滿足人們對于快速檢索信息的需求。云計算技術的發展給搜索引擎帶來了新的機遇。針對中小型機構資金與能力不足,難以實現高效搜索,本文以局域網分布式處理為立足點,首先介紹了云計算平臺 Hadoop 和分布式處理模型MapReduce,在此基礎上,設計了包括分布式爬蟲子系統、分布式索引子系統、檢索子系統、管理控制子系統的分布式搜索引擎系統,實現局域網搜索引擎的分布式處理、可擴展性和可靠性,適合于高校和中小型企業內部的網絡搜索服務。實驗結果表明,相比較于傳統的單機集中式搜索引擎,該系統在搜索效率上有明顯提升。
一、相關理論知識
1.1 Hadoop 云計算平臺。云計算[1]的特征主要有以下幾點:云計算平臺由大規模的廉價服務器支撐;應用程序與底層服務協作開發;使用廉價服務器進行數據資源的冗余存儲并通過軟件來保證云計算平臺的高可用性。Hadoop[2-3]是 Apache 旗下的開源分布式處理平臺,核心技術主要包括:Hadoop Distributed File System(分布式文件系統)和 MapReduce( 分布式處理 ) 模型。HDFS 通常部署在低廉的硬件集群上,進行大數據的可靠存儲與冗余備份,具有高容錯率和高傳輸率。MapReduce 模型將數據擴展到多個計算節點上進行處理,而后進行匯總。HDFS 與 MapReduce緊密集成,使得Hadoop能夠對大數據進行有效的分布式處理,形成高效、可靠、可擴展的軟件框架。
1.2 MapReduce 分布式處理模型。MapReduce[4-5]是一種高效的分布式編程模型,是一種用于處理和生成大規模數據集的實現方式,主要包括兩個過程:Map(映射)階段,系統將處理一系列由鍵值對(key/value)構成的輸入,并產生鍵值對類型的中間結果;Reduce(化簡)階段,reduce 函數將處理具有相同鍵值的中間數據的集合,最后將結果輸出,其流程如下:map(keyin, valuein) list (keyout,Valueintermediate)reduce( keyout, list(valueintermediate)) list(valueout)MapReduce 執行結束之后將會產生與 Reduce 任務數目相當的輸出文件,最終的結果也將存放在這些文件中。通常,程序不會直接將這些文件進行合并,而是將它們作為另一個MapReduce 程序的輸入數據進行繼續處理。
二、系統設計與功能實現
2.1 系統總體架構設計。本文結合中小型機構局域網的實際需求,搜索引擎系統主要由四個子系統組成:分布式爬蟲子系統、分布式索引子系統、控制子系統、查詢子系統,其架構如圖 1 所示:
分布式爬行子系統:主要負責通過 HTTP 協議對網頁進行抓取,提取網頁鏈接并進行分析、更新待抓取 URL 庫,對抓取到的所有網頁進行分布式存儲。
分布式索引子系統:對抓取到的網頁的 URL、網頁標題進行提取,對文本進行中文分詞[6]處理,對網頁建立索引,并對索引表進行儲存。
檢索子系統:實現內容查詢和前臺搜索界面,對用戶檢索關鍵詞進行解析,檢索出數據庫中匹配文檔,并對網頁進行排序,將結果返回給用戶。
控制子系統:對搜索引擎系統本身的安全和相關內容的訪問控制,對用戶身份進行認證和訪問權限控制,對搜索引擎集群環境進行管理和監控,實現搜索引擎的安全性。
2.2 系統功能實現
2.2.1 分布式爬蟲實現。網絡爬蟲從種子 URL 集開始抓取網頁,逐層解析子鏈接,遞歸的抓取并保存網頁,直到抓取到所有符合內容的網頁。本文利用 Nutch 的 Crawler 來完成網頁的抓取任務,用 Java 實現爬蟲的多線程執行[7],并基于分布式處理模型 MapReduce 進行 URL 的解析和更新,基于 HDFS 進行 URL 的存儲。爬行子系統的網頁下載任務以Crawler 類作為入口,并依次調用 Inject 模塊,Generate 模塊,Fetch 模塊,Parse 模塊和 Update 模塊相關類和接口。表 1 為分布式爬行器主要功能類:【1】
對分布式爬蟲節點的任務分配,由 NameNode 向各個DateNode 分配抓取任務并實現系統爬行任務的負載均衡。
2.2.2 分布式索引實現?;?Hadoop 建立分布式索引集群,并在索引的上層建立靜態緩存來提高用戶檢索效率,其框架為圖 2:【2】
將 網 頁 數 據 庫 中 的 文 檔 進 行 MapReduce 處 理 成
由 Master 分配若干個獨立運行的 Map 任務到集群中的若干個節點上去執行,生成文檔的索引,利用 HDFS 存儲這些分散的索引在集群中的節點上,再由若干個 Reduce 任務合并這些索引來創建倒排索引。
此外在分布式索引子系統的上層,設計了靜態緩存系統。
對高頻詞匯和常用詞匯采用哈希表保存其關鍵詞和相關附加信息。
三、實驗部署與測試
本文基于 Hadoop 集群環境下測試的,實驗由 4 臺 PC 搭建集群環境,分別命名為 Master,Slave1、Slave2、Slave3,其中 Master 作為 NameNode 和 JobTracker 節點,其余 3 臺作為 DateNode 和 TaskTracker 節點,節點之間由 100M 網互聯,操作系統為 Linux,Hadoop 版本為 Hadoop-0.20.2,Java 采用JDK1.6.0.43,爬蟲采用 Nutch-1.2 的 Crawler,Tomcat7.0 版本,基于本校網站為實驗對象 ,實現分布式搜索,結果表明實現的搜索引擎在搜索時間及搜索效率方面優于傳統的搜索引擎。
四、小結
本文基于 Hadoop 搭建了一個搜索引擎集群,設計了一個分布式搜索引擎系統的整體架構,該系統集成了四個相對獨立的子系統,該系統適用于中小型機構,具有良好的可擴展性與安全性。
參考文獻
[1] 陳康 , 鄭緯民 . 云計算:系統實例與研究現狀 [J]. 軟件學報 ,2009,20(5):1337-1348.
[2] 胡彧 , 封俊 .Hadoop 下的分布式搜索引擎 [J]. 計算機系統應用 ,2010,19(7):224-225.
[3] 楊建丹 . 基于云平臺的分布式索引與檢索系統的設計與實現[D]. 東北大學碩士學位論文 ,2011,14-15.
[4] 李航 . 基于 Hadoop 的分布式搜索過程研究 [J]. 信息與電腦 ,2014,5:141-142.
[5] 王俊生 , 施運霉 , 張仰森 . 基于 Hadoop 的分布式搜索引擎關鍵技術的研究 [J]. 北京信息科技大學學報 ,2011,26(4):53-55.
[6] 曠文科 . 基于分布式計算的搜索引擎關鍵技術研究與實現 [D].西安電子科技大學碩士學位論文 ,2013,16-18.
[7] 范晨曦 . 基于 Hadoop 的搜索引擎的研究與應用 [D]. 浙江理工大學碩士學位論文 ,2013,29-38.