版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章 緒論 隨著計(jì)算機(jī)技術(shù)、通信網(wǎng)、互聯(lián)網(wǎng)的迅速發(fā)展和日益普及,Internet上的信息量快速增長(zhǎng)。從海量的信息塊中快速檢索出用戶真正需要的信息正變得很困難,信息搜索應(yīng)向著具有分布式處理能力方向發(fā)展,本系統(tǒng)利用hadoop分布式開源框架良好的擴(kuò)充能力、較低的運(yùn)作成本、較高的效率和穩(wěn)定性來滿足需求?,F(xiàn)狀: 缺陷和不足:(1)結(jié)果主題相關(guān)度不高。(2)搜素速度慢。引入hadoop+nutch+solr的優(yōu)點(diǎn):(1)hadoop平臺(tái)數(shù)據(jù)處理高效。hadoop集群處理數(shù)據(jù)比起單機(jī)節(jié)省數(shù)倍的時(shí)間,數(shù)據(jù)量越大優(yōu)勢(shì)越明顯,滿足信息采集對(duì)數(shù)據(jù)處理的速度和質(zhì)量要求。(2)hadoop平臺(tái)具有高擴(kuò)展性??梢赃m當(dāng)
2、擴(kuò)展集群數(shù)量來滿足日益不斷增加的數(shù)據(jù)量,而這并不會(huì)毀壞原集群的特性。(3)安全可靠性高。集群的數(shù)據(jù)冗余機(jī)制使得hadoop能從單點(diǎn)失效中恢復(fù),即Hadoop能自動(dòng)進(jìn)行數(shù)據(jù)的多次備份,以確保數(shù)據(jù)不丟失,即使當(dāng)某個(gè)服務(wù)器發(fā)生故障時(shí),它也能重新部署計(jì)算任務(wù)。(4) Nutch不僅提供抓取網(wǎng)頁(yè)的功能,還提供了解析網(wǎng)頁(yè)、建立鏈接數(shù)據(jù)庫(kù)、對(duì)網(wǎng)頁(yè)進(jìn)行評(píng)分、建立solr索引等豐富的功能。(5)通過Nutch插件機(jī)制實(shí)現(xiàn)了系統(tǒng)的可擴(kuò)展性、靈活性和可維護(hù)性,提高了開發(fā)效率。能夠根據(jù)用戶需求進(jìn)行靈活定制抓取和解析,提高了系統(tǒng)使用性。(6)通過solr集群,采用分布式索引在不同的機(jī)器上并行執(zhí)行,實(shí)現(xiàn)檢索服務(wù)器之間的信
3、息交換。可以通過設(shè)定主題進(jìn)行索引檢索。研究目標(biāo)和內(nèi)容本文的研究目標(biāo)是全面深入分析研究分布式搜索引擎,進(jìn)而優(yōu)化分布式搜索引擎中的索引構(gòu)建策略,內(nèi)容包括:(1)深入研究hadoop分布式平臺(tái),仔細(xì)剖析hadoop中的分布式文件系統(tǒng)HDFS和map/Reduce編程模型。(2)深入研究Nutch架構(gòu) 、相關(guān)技術(shù)與體系結(jié)構(gòu),著重研究分析Nutch插件系統(tǒng)的內(nèi)部結(jié)構(gòu)和流程;對(duì)protocol-httpclient插件進(jìn)行開發(fā)支持表單登錄;對(duì) url過濾、信息解析插件進(jìn)行開發(fā),提高搜索的主題相關(guān)度;(實(shí)現(xiàn)用mapreduce的google的排序算法,改進(jìn)系統(tǒng)搜索的關(guān)聯(lián)度)。系統(tǒng)功能結(jié)構(gòu)(1)本地資源解析模
4、塊對(duì)本地文本pdf,word,excel內(nèi)容解析和索引,按照主題分類,添加到相應(yīng)的主題中進(jìn)行搜素。(2)搜索模塊用戶根據(jù)不同主題進(jìn)行內(nèi)容索引、關(guān)鍵詞查詢,將跟查詢關(guān)聯(lián)度最高的前n個(gè)文檔返回給用戶,并統(tǒng)計(jì)出在這些查詢結(jié)果中出現(xiàn)頻率最高的前n個(gè)詞。用戶可根據(jù)需求修改配置文件,提高搜索的相關(guān)度。(3)信息爬取模塊 信息定制采集模塊1、種子URL:用作抓取器爬取的出發(fā)點(diǎn),也叫做根URL。2、關(guān)鍵字:關(guān)鍵字的選擇很重要,描述了抓取任務(wù)的所屬分類的主題方向。3、深度:由于Nutch抓取模塊采用的是廣度優(yōu)先的策略,抓取深度的選擇決定了抓取時(shí)間的長(zhǎng)度和抓取網(wǎng)頁(yè)數(shù)量的大小。一般根據(jù)所選取的種子URL的類型和詳細(xì)
5、程度以及對(duì)網(wǎng)頁(yè)抓取規(guī)模的需求來進(jìn)行設(shè)置。 在信息定制模塊用戶設(shè)置主題信息,url信息、抓取深度的信息,抓取線程根據(jù)定制信息,開始抓取工作。(綜合型搜索引擎;某一主題類網(wǎng)站,垂直搜索引擎;博客搜索引擎) 信息解析過濾模塊根據(jù)fiddle進(jìn)行登錄分析,修改網(wǎng)絡(luò)協(xié)議插件,支持簡(jiǎn)單的一次跳轉(zhuǎn)表單登錄,用戶可以在配置文件中進(jìn)行設(shè)置,然后抓取內(nèi)容;復(fù)雜的登陸需要分析登陸過程,寫出相對(duì)應(yīng)的網(wǎng)絡(luò)協(xié)議插件。由于本系統(tǒng)在網(wǎng)絡(luò)資源采集過程中支持個(gè)性化定制,只對(duì)目標(biāo)站點(diǎn)感興趣的內(nèi)容進(jìn)行采集,分析目標(biāo)站點(diǎn)的結(jié)構(gòu)特點(diǎn),在頁(yè)面采集完成后,從中提取出鏈接、元數(shù)據(jù)、正文、標(biāo)題、關(guān)鍵字、描述等信息,進(jìn)行后續(xù)的過濾和其他處理。鏈接
6、的提取首先要判斷頁(yè)面類型,頁(yè)面的類型可以有應(yīng)答頭分析得出,根據(jù)不同的類型選擇相應(yīng)的爬取和解析插件,對(duì)遇到帶有鏈接的標(biāo)記如<a>、<href>、<frame>等,就從標(biāo)記結(jié)構(gòu)的屬性中找出 目標(biāo)url,并從成對(duì)的該標(biāo)記之間抽取出正文作為該鏈接的說明文字,鏈接文字一般能反映文章的主題信息,系統(tǒng)設(shè)定閾值,判斷主題和說明性文字的相關(guān)性,對(duì)爬取鏈接進(jìn)行過濾,加入到爬取鏈接列表中。定制采集的子模塊,根據(jù)正則表達(dá)式對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行過濾,獲取和處理跟主題相關(guān)的內(nèi)容,過濾無關(guān)的信息內(nèi)容;對(duì)網(wǎng)頁(yè)編碼格式進(jìn)行提取,實(shí)現(xiàn)內(nèi)容編碼的轉(zhuǎn)換。(下一步改進(jìn)主題相關(guān)度鏈接過濾算法)(4)系統(tǒng)管理
7、模塊用戶對(duì)根據(jù)需求對(duì)系統(tǒng)的配置參數(shù)進(jìn)行修改。論文組織結(jié)構(gòu) 1、緒論。本章首先介紹了本文研究的背景及意義,接著研究了信息采集與搜索技術(shù)的國(guó)內(nèi)外發(fā)展現(xiàn)狀,最后給出了本文研究的內(nèi)容和論文組織結(jié)構(gòu)。2、關(guān)鍵技術(shù)。Hadoop、Nutch、Solr技術(shù)架構(gòu)及文本檢索算法本章介紹了開源軟件Hadoop、Nutch、Solr的基本情況;詳細(xì)介紹了Hadoop框架及其進(jìn)行分布式計(jì)算的編程模型MapReduce和數(shù)據(jù)存儲(chǔ)系統(tǒng)HDFS;Nutch以Hadoop的分布式文件系統(tǒng)HDFS作為底層數(shù)據(jù)平臺(tái),采用MapReduce編程方式實(shí)現(xiàn)數(shù)據(jù)的分布式處理,以擴(kuò)展機(jī)制為突出特性,用戶可以根據(jù)實(shí)際需求對(duì)其添加插件進(jìn)行擴(kuò)展
8、改進(jìn),構(gòu)建自己的信息采集搜索系統(tǒng);通過Solr集群,采用分布式索引在不同的機(jī)器上并行執(zhí)行,實(shí)現(xiàn)檢索服務(wù)器之間的信息交換,減小索引對(duì)機(jī)器的要求,同時(shí)介紹了常用的文本檢索算法VSM ,pagerank和lucene默認(rèn)的排序算法。3、系統(tǒng)環(huán)境配置。Hadoop+Nutch+Solr系統(tǒng)的運(yùn)行環(huán)境配置與運(yùn)行。本章介紹配置Hadoop+Nutch+solr系統(tǒng)的運(yùn)行環(huán)境并詳細(xì)闡述其運(yùn)行流程。4、基于Hadoop+Nutch+Solr的信息采集搜索系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。本課題采用hadoop+Nutch+Solr開源軟件,縮短了開發(fā)時(shí)間并且能夠根據(jù)個(gè)性化需要采集數(shù)據(jù)提高搜素結(jié)果的精度,基于mapreduce
9、實(shí)現(xiàn)了pagerank算法,將pagerank作為一個(gè)獨(dú)立的索引項(xiàng)添加到nutch默認(rèn)的lucene排序算法中,用戶可以根據(jù)需求自己定義排序的規(guī)則,提高檢索的相關(guān)度。(基于hadoop的nutch網(wǎng)頁(yè)排序算法研究與實(shí)現(xiàn))系統(tǒng)相關(guān)技術(shù)介紹Hadoop hadoop由 Apache公司于 2005 年秋天作為L(zhǎng)ucene的子項(xiàng)目Nutch的一部分正式引入。Hadoop被定位為一個(gè)易于使用的平臺(tái),以HDFS、MapReduce為基礎(chǔ),能夠運(yùn)行上千臺(tái)PCServer組成的系統(tǒng)集群,并以一種可靠、容錯(cuò)的方式分布式處理請(qǐng)求。本文基于Hadoop+Nutch+Solr開發(fā)的信息采集搜索項(xiàng)目,現(xiàn)對(duì)Hadoop
10、進(jìn)行全面分析和深入研究。Hadoop框架介紹Hadoop是執(zhí)行大數(shù)據(jù)分布式應(yīng)用的開源框架,憑借高效,可靠,可擴(kuò)展等特性受到廣泛應(yīng)用,它有兩大最核心的模塊:進(jìn)行分布式計(jì)算的MapReduce與底層的存儲(chǔ)系統(tǒng)HDFS(Hadoop Distributed FileSystem分布式文件系統(tǒng))。MapReduce中任務(wù)的分解(Map)與結(jié)果的匯總(Reduce)是其主要思想。Map就是將一個(gè)任務(wù)分解成多個(gè)任務(wù),Reduce就是將分解后多任務(wù)分別處理,并將結(jié)果匯總為最終結(jié)果。Hadoop整體由九個(gè)子項(xiàng)目組成,其中MapReduce和HDFS兩大核心將在后文展開具體介紹??蚣苋缦聢D所示,項(xiàng)目功能如下表所
11、示.圖 Hadoop框架圖子項(xiàng)目功能Hadoop CommonHadoop系統(tǒng)核心,提供子項(xiàng)目的基本支持HDFS實(shí)現(xiàn)高吞吐的分布式存儲(chǔ)MapReduce執(zhí)行分布式并行計(jì)算HBase一個(gè)可擴(kuò)展的分布式數(shù)據(jù)庫(kù)系統(tǒng)Pig為并行計(jì)算提供數(shù)據(jù)流語言和執(zhí)行框架Hive提供類SQL語法進(jìn)行數(shù)據(jù)查詢的數(shù)據(jù)倉(cāng)庫(kù)ZooKeeper提供分布式鎖等Mahout一個(gè)大規(guī)模機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘庫(kù)ArvoHadoop的RPC(遠(yuǎn)程過程調(diào)用)方案表Hadoop子項(xiàng)目功能介紹MapReduce編程模型MapReduce是一種編程模型,該模型將數(shù)據(jù)擴(kuò)展到多個(gè)數(shù)據(jù)節(jié)點(diǎn)上進(jìn)行處理,它最早是Google提出的一個(gè)軟件架構(gòu),用于大規(guī)模數(shù)據(jù)
12、集(大于1TB)的并行運(yùn)算。并行編程模式的最大優(yōu)點(diǎn)是容易擴(kuò)展到多個(gè)計(jì)算節(jié)點(diǎn)上處理數(shù)據(jù)。開發(fā)者可以很容易就編寫出分布式并行程序。mapreduce的主要思想是將自動(dòng)分割要執(zhí)行的問題(例如程序)拆解成map(映射)和reduce(化簡(jiǎn))的方式;一個(gè)MapReduce作業(yè)(job)首先會(huì)把輸入的數(shù)據(jù)集分割為多個(gè)獨(dú)立的數(shù)據(jù)塊,再以鍵值對(duì)形式輸給Map函數(shù)并行處理。Map函數(shù)接受一個(gè)輸入鍵值對(duì)的值,產(chǎn)生一個(gè)中間鍵值對(duì)集合,由MapReduce保存并集合所有具有相同中間key值的中間value值傳遞給Reduce函數(shù), reduce對(duì)這些value值進(jìn)行合并,形成一個(gè)value值集合,最終形成輸出數(shù)據(jù)。
13、處理流程如下圖:MapReduce的處理流程Hadoop的分布式文件系統(tǒng)(HDFS)Hadoop分布式文件系統(tǒng)(HDFS)是Google GFS存儲(chǔ)系統(tǒng)的開源實(shí)現(xiàn),HDFS具有高容錯(cuò)性和高傳輸率,特別適合具有大數(shù)據(jù)集的程序應(yīng)用。 HDFS采用master/slave架構(gòu)。一個(gè)HDFS集群包含一個(gè)單獨(dú)的名字節(jié)點(diǎn)(Namenode)和一定數(shù)目的數(shù)據(jù)節(jié)點(diǎn)(Datanode)組成一個(gè)HDFS集群。HDFS被設(shè)計(jì)成一個(gè)可以在大集群中、跨機(jī)器、可靠的存儲(chǔ)海量數(shù)據(jù)的框架。它將所有文件存儲(chǔ)成block塊組成的序列,除了最后一個(gè)block塊,所有的block塊大小都是一樣的,他們存放在一組Datano
14、de中,文件的所有block塊都會(huì)因?yàn)槿蒎e(cuò)而被復(fù)制,每個(gè)文件的block塊大小和容錯(cuò)復(fù)制份數(shù)都是可配置的,他們?cè)贜amenode的統(tǒng)一調(diào)度小進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制工作。下圖所示為HDFS的體系架構(gòu) 圖 HDFS體系結(jié)構(gòu)圖Namenode和Datanode都可以在普通計(jì)算機(jī)上運(yùn)行。Namenode作為master服務(wù),它負(fù)責(zé)管理文件系統(tǒng)的命名空間和客戶端對(duì)文件的訪問。NameNode會(huì)保存文件系統(tǒng)的具體信息,包括文件信息、文件被分割成具體block塊的信息、以及每一個(gè)block塊歸屬的Datanode的信息,對(duì)于整個(gè)集群來說,HDFS通過Namenode對(duì)用戶提供了一個(gè)單一的命名空間;
15、160;Datanode作為slave服務(wù),在集群中可以存在多個(gè),通常每一個(gè)Datanode都對(duì)應(yīng)于一個(gè)物理節(jié)點(diǎn),Datanode負(fù)責(zé)管理節(jié)點(diǎn)上它們擁有的存儲(chǔ),它將存儲(chǔ)劃分為多個(gè)block塊,管理block塊信息,同時(shí)周期性的將其所有的block塊信息發(fā)送給Namenode。從上面的介紹可以看出,在搭建好的Hadoop集群上,大數(shù)據(jù)集首先會(huì)由HDFS安全穩(wěn)定地分布存儲(chǔ)到集群內(nèi)的多臺(tái)機(jī)器上,再利用MapReduce模型將該數(shù)據(jù)集分解為較小的塊(一般為64MB)進(jìn)行處理,特點(diǎn)是高效、安全、具備高吞吐量。Hadoop用戶可以在不了解分布式底層細(xì)節(jié)的情況下很好地利用該分布式平臺(tái)開發(fā)分布式程序,進(jìn)行高效
16、數(shù)據(jù)存儲(chǔ)和運(yùn)算。因此Hadoop成為管理大量數(shù)據(jù)的關(guān)鍵技術(shù),在信息采集和搜索領(lǐng)域的使用范圍越來越廣。hadoop具備以下突出的優(yōu)點(diǎn):(1)hadoop平臺(tái)數(shù)據(jù)處理簡(jiǎn)單高效。hadoop運(yùn)行在由普通PC機(jī)組建的大型集群上,用戶可以在平臺(tái)上快速編寫并行代碼運(yùn)行分布式應(yīng)用,避免耗時(shí)的數(shù)據(jù)傳輸問題;集群處理數(shù)據(jù)比起單機(jī)節(jié)省數(shù)倍的時(shí)間,數(shù)據(jù)量越大優(yōu)勢(shì)越明顯,滿足信息采集對(duì)數(shù)據(jù)處理的速度和質(zhì)量要求。(2)hadoop平臺(tái)具有高擴(kuò)展性??梢赃m當(dāng)擴(kuò)展集群數(shù)量來滿足日益不斷增加的數(shù)據(jù)量,而這并不會(huì)毀壞原集群的特性。(3)安全可靠性高。集群的數(shù)據(jù)冗余機(jī)制使得hadoop能從單點(diǎn)失效中恢復(fù),即Hadoop能自動(dòng)進(jìn)行
17、數(shù)據(jù)的多次備份,以確保數(shù)據(jù)不丟失,即使當(dāng)某個(gè)服務(wù)器發(fā)生故障時(shí),它也能重新部署計(jì)算任務(wù)。Nutch Nutch 是 Apache 基金會(huì)的一個(gè)開源項(xiàng)目,它原本是開源文件索引框架 Lucene 項(xiàng)目的一個(gè)子項(xiàng)目,后來漸漸發(fā)展成長(zhǎng)為一個(gè)獨(dú)立的開源項(xiàng)目。它基于 Java 開發(fā),基于 Lucene 框架,提供 Web 網(wǎng)頁(yè)爬蟲功能。從 nutch0.8.0開始,Nutch 完全構(gòu)建在 Hadoop 分布式計(jì)算平臺(tái)之上,因此基于 Hadoop 的 Nutch 信息采集系統(tǒng)可以部署在由成千上萬計(jì)算機(jī)組成的大型集群上,Nutch 也分為2部分,信息爬取和檢索,但nutch1.2版本之后,Nutch專注的只是爬
18、取數(shù)據(jù),而全文檢索的部分徹底的交給solr。nutch的抓取流程中,抓取器也叫蜘蛛或者機(jī)器人,以廣度優(yōu)先搜索(BFS)的方式從企業(yè)內(nèi)部網(wǎng)或者互聯(lián)網(wǎng)抓取網(wǎng)頁(yè),爬取過程包括了爬蟲模塊和解析模塊。爬蟲程序?qū)⒕W(wǎng)頁(yè)頁(yè)面抓回判斷格式解析數(shù)據(jù),形成頁(yè)面內(nèi)容數(shù)據(jù)庫(kù)。種子url nutch的采集過程要預(yù)先給定初始種子url,而種子url的選擇將直接影響主題搜索的質(zhì)量,因此選取初始種子url的原則是種子頁(yè)面本身要具有較高的主題相關(guān)性。初始種子url既可以是一個(gè)網(wǎng)站的首頁(yè),也可以是網(wǎng)站的子頁(yè)面,關(guān)鍵是要盡可能的覆蓋主題資源,最終實(shí)現(xiàn)抓取目標(biāo)的最大化,主要有四種方法生成初始種子url:(1)人工指定: 給出某個(gè)領(lǐng)域的
19、權(quán)威專家給出相關(guān)的種子頁(yè)面。(2)自動(dòng)生成:根據(jù)用戶指定的部分關(guān)鍵詞,并將這些關(guān)鍵詞提交給通用搜索引擎,從檢索結(jié)果中抽取前N個(gè)頁(yè)面作為種子頁(yè)面。(3)混合模式:即人工指定與自動(dòng)生成相結(jié)合,首先利用通用搜索引擎獲得部分相關(guān)頁(yè)面,然后經(jīng)過人工篩選、過濾、合并、評(píng)價(jià),形成一個(gè)能充分反映主題特征的種子頁(yè)面。(4)增加爬蟲的學(xué)習(xí)能力:通過建立各個(gè)領(lǐng)域的主題種子庫(kù),并對(duì)檢索歷史、用戶反饋信息進(jìn)行分析的基礎(chǔ)上,動(dòng)態(tài)優(yōu)化產(chǎn)生相應(yīng)主題的種子頁(yè)面集。種子的選取在實(shí)際操作中應(yīng)該根據(jù)需求及領(lǐng)域的特征選擇適當(dāng)?shù)姆椒āutch插件機(jī)制Nutch另外很吸引人的一點(diǎn)在于,它提供了一種插件框架,使得其對(duì)各種網(wǎng)頁(yè)內(nèi)容的解析、各
20、種數(shù)據(jù)的采集、查詢、集群、過濾等功能能夠方便的進(jìn)行擴(kuò)展,插件的擴(kuò)展只需通過給定接口實(shí)現(xiàn),每個(gè)接口之下的實(shí)現(xiàn)相互獨(dú)立,用戶可以專注于目標(biāo)接口的擴(kuò)展而不必?fù)?dān)心該接口與其他接口的交互Nutch 的插件體系結(jié)構(gòu)。nutch使用plugin系統(tǒng)有三個(gè)原因:1、可擴(kuò)展性 通過plugin,nutch允許任何人擴(kuò)展它的功能,而我們要做的只是對(duì)給定的接口做簡(jiǎn)單的實(shí)現(xiàn)。2、靈活性 因?yàn)槊總€(gè)人都可以根據(jù)自己的需求而寫自己的plugin,這樣plugin就會(huì)有一個(gè)很強(qiáng)大的資源庫(kù)。這樣對(duì)
21、與應(yīng)用nutch程序員來說你有了更多的關(guān)于內(nèi)容爬取、過濾的算法來選擇。3、可維護(hù)性 一個(gè)plugin的開發(fā)者只要關(guān)注這個(gè)plugin所要實(shí)現(xiàn)的功能,而不需要知道整個(gè)系統(tǒng)是怎么工作的,僅僅需要知道的是plugin和plug之間交換的數(shù)據(jù)類型,這使得內(nèi)核更加簡(jiǎn)單,更容易維護(hù)。插件體系結(jié)構(gòu)圖 圖 插件體系結(jié)構(gòu)插件的內(nèi)部結(jié)構(gòu)圖 插件內(nèi)部結(jié)構(gòu)runtime :描述了其需要的 Jar 包,和發(fā)布的 Jar 包requires :描述了依賴的插件extension :描述了擴(kuò)展點(diǎn)的實(shí)現(xiàn)extension-point: 描述插件宣布可擴(kuò)展的擴(kuò)展點(diǎn)Nutch通過插件機(jī)制實(shí)現(xiàn)了系統(tǒng)的可擴(kuò)展性、靈活性和可維護(hù)性,使
22、得各個(gè)部分的開發(fā)人員只需關(guān)注自己的領(lǐng)域,不必去擔(dān)心如何整合系統(tǒng),也極大的提高了開發(fā)效率。爬蟲技術(shù)1、網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲實(shí)際上是一個(gè)基于 web的程序,它從初始的種子站點(diǎn)出發(fā),進(jìn)行過濾檢查,當(dāng)爬蟲打開某個(gè) HTML 頁(yè)面后,它會(huì)分析 HTML 標(biāo)記結(jié)構(gòu)來獲取信息,并獲取指向其它頁(yè)面的超級(jí)鏈接,然后通過既定的搜索策略選擇下一個(gè)要訪問的站點(diǎn)。 從理論上講, 如果為 Spider 指定個(gè)適當(dāng)?shù)某跏嘉臋n集和個(gè)適當(dāng)?shù)木W(wǎng)絡(luò)搜索策略,它就可以遍歷整個(gè)網(wǎng)絡(luò)。為了解決Web采集的關(guān)鍵問題,經(jīng)過不斷地研究與實(shí)踐,將爬行器由最早期單純的基于整個(gè)Web的爬行器發(fā)展到可滿足不同需要的多種采集技術(shù)的爬行器。大致可以分為以下幾
23、種類型:第一種是基于整個(gè)Web的爬行器。主要是指目標(biāo)為從一些種子URL擴(kuò)充到整個(gè)Web的爬行器。第二種是增量式的爬行器。傳統(tǒng)的爬行器根據(jù)自己的需要采集足量的信息后停止采集,當(dāng)過一段時(shí)間這些數(shù)據(jù)過時(shí)后,它會(huì)重新采集一遍來代替先前的信息,稱為周期性Web采集器。而增量式的爬行器對(duì)待就的頁(yè)面采用增量式更新,即采集器在需要的時(shí)候采集新產(chǎn)生的或己經(jīng)發(fā)生了變化的頁(yè)面,而對(duì)沒有變化的頁(yè)面不進(jìn)行采集。和周期性信息采集相比,增量式信息采集能極大地減小數(shù)據(jù)采集量,從而極大地減少了采集的時(shí)間與空間開銷。但是與此同時(shí),增量式信息采集也增加了算法的復(fù)雜性和技術(shù)難度。第三種是基于主題的爬行器是指選擇性地搜尋那些與預(yù)先定義
24、好的主題相關(guān)的頁(yè)面的爬行器。和基于整個(gè)Web的爬行器相比,它并不采集那些與主題無關(guān)的頁(yè)面,所以大大地節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁(yè)面也由于數(shù)量少而更新快。第四種是基于用戶個(gè)性化的爬行器。不同的用戶對(duì)一個(gè)搜索引擎提交同一個(gè)檢索詞,他們期待的結(jié)果是不盡相同的。而通用的搜索引擎卻只能返回相同的檢索結(jié)果,這顯然不完全符合用戶的需要。而基于用戶個(gè)性化的爬行器是一種輕量級(jí)的采集系統(tǒng),它的目標(biāo)就是通過用戶興趣制導(dǎo)或與用戶交互等手段來采集信息,給用戶提供個(gè)性化服務(wù)。第五種是移動(dòng)的爬行器。這種爬行器并不像其他爬行器一樣在本地客戶機(jī)向Web站點(diǎn)服務(wù)器發(fā)送頁(yè)面請(qǐng)求,而是將自己上載到它所要采集的服務(wù)器中,在當(dāng)?shù)剡M(jìn)行采
25、集,并將采集結(jié)果壓縮后,再回傳到本地。這樣做大量地節(jié)省了Web資源,大量的剪裁工作將在被采集對(duì)象的服務(wù)器上完成。第六種是基于元搜索的爬行器。它對(duì)用戶的提交的查詢請(qǐng)求通過多個(gè)領(lǐng)域或門戶搜索引擎搜索,并將結(jié)果整合后返回給用戶。一般元搜索引擎并不保存Web頁(yè)面的索引文件,但是有一些元搜索引擎會(huì)保存為它服務(wù)的每個(gè)搜索引擎的信息特征,以后根據(jù)用戶請(qǐng)求做出選擇。 Nutch使用累積式爬取與增量式爬取相結(jié)合的策略進(jìn)行,既保證了數(shù)據(jù)的完整性又保證了時(shí)效性。2、網(wǎng)絡(luò)爬蟲爬行策略網(wǎng)頁(yè)的抓取策略可以分為廣度優(yōu)先、深度優(yōu)先和最佳優(yōu)先三種。深度優(yōu)先在很多情況下會(huì)導(dǎo)致爬蟲的陷入(trapped)問題,目前常見的是廣度優(yōu)先
26、和最佳優(yōu)先方法。1、廣度優(yōu)先搜索 廣度優(yōu)先搜索策略是指在抓取過程中,在完成當(dāng)前層次的搜索后,才進(jìn)行下一層次的搜索。該算法的設(shè)計(jì)和實(shí)現(xiàn)相對(duì)簡(jiǎn)單。在目前為覆蓋盡可能多的網(wǎng)頁(yè),一般使用廣度優(yōu)先搜索方法。下面,我將以圖示的方式介紹廣度優(yōu)先遍歷的過程,如下圖所示。圖 () 選擇A作為初始 種子節(jié)點(diǎn)url,則廣度優(yōu)先搜索的過程,如表()所示。表 廣度優(yōu)先搜索過程操作隊(duì)列中的元素初始空A入隊(duì)列AA出隊(duì)列空BCDEF入隊(duì)列BCDEFB出隊(duì)列CDEFC出隊(duì)列DEFD出隊(duì)列EFE出隊(duì)列FH入隊(duì)列FHF出隊(duì)列FG入隊(duì)列HGH出隊(duì)列GI入隊(duì)列GIG出隊(duì)列I I 出隊(duì)列空在表所示的搜索過程中,出隊(duì)列的節(jié)點(diǎn)順序即是圖()
27、的廣度優(yōu)先搜索過程。由此可見,圖()所示的廣度優(yōu)先搜索過程的順序?yàn)椋篈-B-C-D-E-F-H-G-I。2、深度優(yōu)先搜索 深度優(yōu)先搜索策略從起始網(wǎng)頁(yè)開始,選擇一個(gè)URL進(jìn)入,分析這個(gè)網(wǎng)頁(yè)中的URL,選擇一個(gè)再進(jìn)入。如此一個(gè)鏈接一個(gè)鏈接地抓取下去,直到處理完一條路線之后再處理下一條路線,但每深入一層,網(wǎng)頁(yè)價(jià)值和PageRank都會(huì)相應(yīng)地有所下降。 圖()所示的深度優(yōu)先廣度優(yōu)先搜索過程的順序?yàn)椋篈-B-C-D -E-H-I-F-G3、最佳優(yōu)先搜索 最佳優(yōu)先搜索策略按照一定的網(wǎng)頁(yè)分析算法,預(yù)測(cè)候選URL與目標(biāo)網(wǎng)頁(yè)的相似度,或與主題的相關(guān)性,并選取評(píng)價(jià)最好的一個(gè)或幾個(gè)URL進(jìn)行抓取。它只訪問與主題相關(guān)
28、的網(wǎng)頁(yè) 。信息檢索技術(shù)信息檢索(IR),通俗的講,就是要在一個(gè)很大的文本(有時(shí)可能是其他數(shù)據(jù),如圖像等)集合中,找到與用戶需求相關(guān)的可以滿足用戶需求的非結(jié)構(gòu)化信息。向量空間模型(VSM)向量空間模型將文檔映射為一個(gè)特征向量V(d)=(t1,1(d);tn, n(d),其中ti(i=1,2, ,n)為一列互不雷同的詞條項(xiàng),i(d)為ti在d中的權(quán)值, 一般被定義為ti在d中出現(xiàn)頻率tfi(d)的函數(shù),即 。在信息檢索中常用的詞條權(quán)值計(jì)算方法為 TF-IDF 函數(shù),其中N為所有文檔的數(shù)目,ni為含有詞條ti的文檔數(shù)目。TF-IDF公式有很多變種,下面是一個(gè)常用的TF-IDF公
29、式:根據(jù)TF-IDF公式,文檔集中包含某一詞條的文檔越多,說明它區(qū)分文檔類別屬性的能力越低,其權(quán)值越??;另一方面,某一文檔中某一詞條出現(xiàn)的頻率越高,說明它區(qū)分文檔內(nèi)容屬性的能力越強(qiáng),其權(quán)值越大。兩文檔之間的相似度可以用其對(duì)應(yīng)的向量之間的夾角余弦來表示,即文檔di,dj的相似度可以表示為進(jìn)行查詢的過程中,先將查詢條件Q進(jìn)行向量化,主要依據(jù)布爾模型:當(dāng)ti在查詢條件Q中時(shí),將對(duì)應(yīng)的第i坐標(biāo)置為1,否則置為0,即從而文檔d與查詢Q的相似度為在查詢過程中,可以計(jì)算出每個(gè)文檔與查詢的相似度,進(jìn)而可以根據(jù)相似度的大小,將查詢的結(jié)果進(jìn)行排序。向量空間模型可以實(shí)現(xiàn)文檔的自動(dòng)分類和對(duì)查詢結(jié)果的相似度排序,能夠有
30、效提高檢索效率;它的缺點(diǎn)是相似度的計(jì)算量大,當(dāng)有新文檔加入時(shí),則必須重新計(jì)算詞的權(quán)值。Lucene Scoring 評(píng)分機(jī)制solr使用lucene的內(nèi)部評(píng)分機(jī)制,現(xiàn)對(duì)lucene的評(píng)分機(jī)制進(jìn)行介紹。lucene 的評(píng)分公式:score(q,d) = coord(q,d) · queryNorm(q) ·( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d)
31、 )t in q其中:tf(t in d) 關(guān)聯(lián)到項(xiàng)頻率,項(xiàng)頻率是指 項(xiàng) t 在 文檔 d 中出現(xiàn)的次數(shù) frequency。默認(rèn)的實(shí)現(xiàn)是:tf(t in d) =frequency½idf(t) 關(guān)聯(lián)到反轉(zhuǎn)文檔頻率,文檔頻率指出現(xiàn) 項(xiàng) t 的文檔數(shù) docFreq。docFreq 越少 idf 就越高。默認(rèn)實(shí)現(xiàn):idf(t) =1 + log (numDocsdocFreq+1)coord(q,d) 評(píng)分因子,是基于文檔中出現(xiàn)查詢項(xiàng)的個(gè)數(shù)。越多的查詢項(xiàng)在一個(gè)文檔中
32、,說明些文檔的匹配程序越高。默認(rèn)是出現(xiàn)查詢項(xiàng)的百分比。queryNorm(q)查詢的標(biāo)準(zhǔn)查詢,使不同查詢之間可以比較。此因子不影響文檔的排序,因?yàn)樗杏形臋n都會(huì)使用此因子。默認(rèn)值:queryNorm(q) = queryNorm(sumOfSquaredWeights) =1sumOfSquaredWeights½ 每個(gè)查詢項(xiàng)權(quán)重的平分方和(sumOfSquaredWeights)由 Weight 類完成。例如 BooleanQuery 地計(jì)算:sumOfSquaredWeights = q.getBoost()
33、;2 ·( idf(t) · t.getBoost() ) 2t in qt.getBoost()查詢時(shí)期的 項(xiàng) t 加權(quán)(如:java1.2),或者由程序使用 setBoost()。norm(t,d)壓縮幾個(gè)索引期間的加權(quán)和長(zhǎng)度因子:Document boost - 文檔加權(quán),在索引之前使用 doc.setBoost()Field boost - 字段加權(quán),也在索引之前調(diào)用 field.setBoost()lengthNorm(field) - 由字段內(nèi)的 Token 的個(gè)數(shù)來計(jì)算
34、此值,字段越短,評(píng)分越高,在做索引的時(shí)候由 Similarity.lengthNorm 計(jì)算。以上所有因子相乘得出 norm 值,如果文檔中有相同的字段,它們的加權(quán)也會(huì)相乘:norm(t,d) = doc.getBoost() · lengthNorm(field) ·f.getBoost()field f in d named as t索引的時(shí)候,把 norm 值壓縮(encode)成一個(gè) byte 保存在索引中。搜索的時(shí)候再把索引中 norm 值解壓(decod
35、e)成一個(gè) float 值,這個(gè) encode/decode 由 Similarity 提供。solr使用了Lucene的內(nèi)核,也繼承了Lucene的打分規(guī)則,我們可以根據(jù)自己的應(yīng)用實(shí)現(xiàn)評(píng)分算法,換掉默認(rèn)的;也可以使用默認(rèn)的,利用修改solr配置文件,來調(diào)節(jié)評(píng)分。Page Rank算法一個(gè)網(wǎng)頁(yè)的重要性等于指向它的所有網(wǎng)頁(yè)的重要性相加之和。如果網(wǎng)頁(yè)j存在一個(gè)指向網(wǎng)頁(yè)i的連接,則表明j的所有者認(rèn)為i比較重要,從而把j的一部分重要性得分賦予i。這個(gè)重要性得分值為:為網(wǎng)頁(yè)j的PageRank值,為網(wǎng)頁(yè)j的出鏈數(shù)。一個(gè)頁(yè)面的PageRank是由所有鏈向它的頁(yè)面(鏈入頁(yè)面)的重要性經(jīng)過遞歸算法得到的。一個(gè)
36、有較多鏈入的頁(yè)面會(huì)有較高的等級(jí),相反如果一個(gè)頁(yè)面沒有任何鏈入頁(yè)面,那么它沒有等級(jí)。 由于存在一些出鏈為0,也就是那些不鏈接任何其他網(wǎng)頁(yè)的網(wǎng), 也稱為孤立網(wǎng)頁(yè)。因此需要對(duì) PageRank公式進(jìn)行修正,即在簡(jiǎn)單公式的基礎(chǔ)上增加了阻尼系數(shù)(damping factor)q, q一般取值q=0.85。即網(wǎng)頁(yè)i的PageRank值;所以公式的意義是:網(wǎng)頁(yè)i的PageRank值=(1-d)+d*(鏈接到網(wǎng)頁(yè)i的所有PR值/該網(wǎng)頁(yè)的所有出鏈數(shù)量之和)。信息采集搜索系統(tǒng)的安裝本系統(tǒng)采用hadoop1.1.2+nutch1.6+solr4.10分布式集群進(jìn)行信息的采集與搜索,集群的配置情況如下圖:
37、表() 系統(tǒng)配置序號(hào)名稱描述1Hadoop1.1.2使用MapReduce進(jìn)行并行爬取,使用HDFS存儲(chǔ)數(shù)據(jù),Nutch的任務(wù)提交在Hadoop集群上,支持分布式2Nutch1.6主要負(fù)責(zé)爬取數(shù)據(jù),支持分布式3Solr4.10主要負(fù)責(zé)檢索,對(duì)爬完后的數(shù)據(jù)進(jìn)行搜索,查詢,海量數(shù)據(jù)支持分布式4Centos6.5Linux系統(tǒng),在上面運(yùn)行hadoop、nutch等應(yīng)用5Tomcat7.0應(yīng)用服務(wù)器,給Solr提供容器運(yùn)行6JDK1.7提供JAVA運(yùn)行環(huán)境7Ant1.9提供Nutch等源碼編譯8IKAnalyzer對(duì)網(wǎng)頁(yè)內(nèi)容與標(biāo)題進(jìn)行分詞,便于全文檢索hadoop系統(tǒng)的運(yùn)行環(huán)境配置 hadoop需要在
38、Java環(huán)境和Unix系統(tǒng)下運(yùn)行,也可以跨平臺(tái)運(yùn)行,本系統(tǒng)是在linux操作系統(tǒng)下運(yùn)行,需要配置完成以下運(yùn)行環(huán)境:· Java環(huán)境: jdk1.7版本vi /etc/profileexport JAVA_HOME=/usr/jdk1.7export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH從而完成所需要的java環(huán)境配置。· hadoop集群配置:hadoop1.
39、1.2我在這里做了5個(gè)機(jī)器的hadoop集群Master.Hadoop2Slave1.Hadoop3Slave2.Hadoop4Slave3.Hadoop5Slave4.Hadoop6在 2上vi /etc/profileexport HADOOP_HOME=/home/hadoopmaster/hadoop-1.1.2export PATH=$PATH:$HADOOP_HOME/binvi /etc/hosts localhost1
40、2 Master.Hadoop3 Slave1.Hadoop4 Slave2.Hadoop5 Slave3.Hadoop6 Slave4.Hadooplocalhost Master.Hadoop配置無密碼登錄,在這里我不做介紹。進(jìn)入hadoop-1.1.2/conf下vi masters3(secondaryhost)vi slaves2345192.168
41、.47.66 vi hadoop-1.12/conf /core-stie.xml vi conf/hdfs-site.xml vi conf/mapred-site.xml把配置好的hadoop文件夾拷貝到集群的其他機(jī)器中。nutch的運(yùn)行環(huán)境配置下載apache-nutch-1.6的源文件,把nutch導(dǎo)入到eclipse進(jìn)行二次開發(fā)的過程在這里不做介紹。vi conf/nutch-site.xml<property> <name>plugin.includes</name> <value>protocol-httpclient|urlfil
42、ter-regex|parse-(html|tika|js|pdf|msword)|recommquery|index-(basic|anchor)|scoring-opic|urlnormalizer-(pass|regex|basic)</value></property><property> <name>http.timeout</name> <value>10000</value> </property<property><name></
43、name> <value>Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)Gecko/20100101 Firefox/20.0</value></property><property> <name>plugin.folders</name> <value>./src/plugin</value></property><property> <name>http.redirect.max</na
44、me> <value>2</value></property> <property><name>http.content.limit</name><value>-1</value></property><property><name>file.content.limit</name><value>-1</value></property><property><name>http.acce
45、pt.language</name><value>en-us,en-gb,en;q=0.7,*;q=0.3</value></property>Nutch與solr的集成配置1、將solr/example/webapps/solr.war拷貝到tomcat的webapps中2、進(jìn)入到到tomcat7中,對(duì)war進(jìn)行解壓,然后刪除war包。3、拷貝solr/example/lib/ext下的相關(guān)依賴jar包到webapps/solr/WEB-INFO/lib中4、修改web.xml的solr/home指定到solr所在的路徑。5、修改tomcat/
46、conf的server.xml文件中的編碼加入一行URLEncoding="UTF-8"6、solr不會(huì)自動(dòng)創(chuàng)建core,把multicore中的core0拷到solr/example/,拷貝nutch的配置文件schema-solr4.xml到core0/conf/下,重命名schema-solr4.xml為schema.xml,修改solrconfig.xml要和對(duì)應(yīng)的core對(duì)應(yīng),7 、加入分詞工具,在這里對(duì)我用的是IKAnalyzer?;贖adoop+Nutch+Solr的信息采集搜索系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 信息采集搜索系統(tǒng)的實(shí)現(xiàn),以第二章相關(guān)技術(shù)理論分析與研究為基礎(chǔ),
47、利用MapReduce編程模型在分布式處理方面的優(yōu)點(diǎn),實(shí)現(xiàn)了pagerank算法在系統(tǒng)檢索中的評(píng)分;對(duì)nutch的url過濾,內(nèi)容解析插件進(jìn)行改進(jìn),實(shí)現(xiàn)了用戶自訂制鏈接和獲取的主題內(nèi)容;對(duì)本地資料文件實(shí)現(xiàn)格式識(shí)別并抽取題名、時(shí)間、內(nèi)容等文本信息保存為xml文件,實(shí)現(xiàn)本地相關(guān)主題信息查詢。系統(tǒng)采用IK分詞器,最終完成了信息采集與搜索的設(shè)計(jì)與實(shí)現(xiàn)。系統(tǒng)結(jié)構(gòu)總體設(shè)計(jì) 本系統(tǒng)部署在hadoop+nutch+solr的集群框架上,分為四個(gè)部分,系統(tǒng)功能組成如下:系統(tǒng)功能組成圖 資料文檔解析,實(shí)現(xiàn)單個(gè)文件和壓縮文件上傳,對(duì)壓縮文件自動(dòng)解壓;對(duì)資料文件實(shí)現(xiàn)多格式識(shí)別,例如pdf,word,html,exce
48、l等格式文件,文件提取標(biāo)題,作者,時(shí)間,內(nèi)容等關(guān)鍵信息,轉(zhuǎn)換為xml文件,保存在指定路徑下,對(duì)文件集建立索引,進(jìn)行搜索查詢。分布式爬取,系統(tǒng)利用hadoop+nutch 實(shí)現(xiàn)分布式數(shù)據(jù)爬取,對(duì)插件進(jìn)行改進(jìn)實(shí)現(xiàn)url過濾;對(duì)爬出的子站點(diǎn)網(wǎng)頁(yè)結(jié)構(gòu)進(jìn)行分析,過濾那些不希望存在的文本內(nèi)容,改進(jìn)解析插件,實(shí)現(xiàn)用戶可以進(jìn)行內(nèi)容過濾定制,去除腳本、圖片以及其它標(biāo)簽,獲取和處理跟主題相關(guān)的內(nèi)容;對(duì)網(wǎng)頁(yè)編碼格式進(jìn)行提取,實(shí)現(xiàn)內(nèi)容編碼的轉(zhuǎn)換。本系統(tǒng)支持帶有一次跳轉(zhuǎn)的簡(jiǎn)單表單登陸的抓取,系統(tǒng)管理中設(shè)置對(duì)應(yīng)的相關(guān)信息;復(fù)雜的登陸需要分析登陸過程,另外寫出相對(duì)應(yīng)的網(wǎng)絡(luò)協(xié)議插件。系統(tǒng)區(qū)分領(lǐng)域,根據(jù)不同主題建立索引。分布式
49、檢索,系統(tǒng)實(shí)現(xiàn)選擇不同主題的core進(jìn)行查詢,輸入查詢關(guān)鍵詞,提供檢索文檔中出現(xiàn)詞頻最高的前n個(gè)詞和關(guān)聯(lián)文檔;用戶自動(dòng)創(chuàng)建不同core,修改模板配置文件相應(yīng)選項(xiàng),進(jìn)行替換。系統(tǒng)管理,實(shí)現(xiàn)用戶對(duì)nutch插件的修改;實(shí)現(xiàn)用戶對(duì)簡(jiǎn)單表單登陸的相應(yīng)參數(shù)修改;用戶可以改變?nèi)鏺eywords,description,pagerank等fields索引項(xiàng)信息,根據(jù)站點(diǎn)特征,從而改變排序主題關(guān)聯(lián)度。系統(tǒng)架構(gòu)圖系統(tǒng)利用hadoop+nutch 實(shí)現(xiàn)分布式數(shù)據(jù)爬取,基于Map/Reduce編程模型,充分利用其并行特性進(jìn)行任務(wù)分發(fā)和結(jié)果的歸并,獲取高效高質(zhì)的爬行結(jié)果。系統(tǒng)架構(gòu)圖如下:系統(tǒng)架構(gòu)圖 本系統(tǒng)基于五個(gè)節(jié)點(diǎn)
50、的Hadoop框架實(shí)現(xiàn)。在Master節(jié)點(diǎn)上,JobTracker負(fù)責(zé)待爬取網(wǎng)頁(yè)鏈接的分割并將任務(wù)分配給五個(gè)節(jié)點(diǎn)的TaskTracker執(zhí)行爬取任務(wù)。Master節(jié)點(diǎn)在協(xié)調(diào)整個(gè)系統(tǒng)分布式處理的同時(shí),也充當(dāng)一個(gè)DataNode參與任務(wù)執(zhí)行。TaskTracker接受JobTracker分配的任務(wù)后,啟動(dòng)多個(gè)線程執(zhí)行Map下載任務(wù),完成網(wǎng)頁(yè)抓取工作。TaskTracker監(jiān)測(cè)到Map任務(wù)執(zhí)行完畢后啟動(dòng)Reduce執(zhí)行數(shù)據(jù)合并任務(wù)。在HDFS文件系統(tǒng)中有三個(gè)數(shù)據(jù)庫(kù):CrawlDb和LinkDb存儲(chǔ)URL及URL互聯(lián)關(guān)系,作為爬行和重新爬取的依據(jù);Segments存儲(chǔ)抓取的網(wǎng)頁(yè)內(nèi)容。1、在Hadoop
51、和nutch基礎(chǔ)上爬取的運(yùn)行流程如下圖所示:圖hadoop+nutch爬取運(yùn)行流程讀取URL種子文件到CrawlDB,然后進(jìn)行下面的抓取程序:(1)循環(huán)1-4到指定的抓取深度; 從CrawlDB生成抓取列表;根據(jù)抓取列表中的URL抓取網(wǎng)頁(yè);分析處理抓取的內(nèi)容;更新CrawlDB庫(kù)。(2)解析出文本和轉(zhuǎn)換每個(gè)頁(yè)面中外部對(duì)它的鏈接。(3)用solr建立索引。各個(gè)模塊分析如下:插入U(xiǎn)RL列表(Inject)(1)將URL集合進(jìn)行格式化、主題相關(guān)度過濾和合并,消除其中非法URL,并設(shè)定入了URL狀態(tài)(unfetched)和初始化分值;(2)將URL及其狀態(tài)、分值存入CrawlDB數(shù)據(jù)庫(kù),與原數(shù)據(jù)庫(kù)中重
52、復(fù)則更換成新的。下面用Infect模塊的例子說明MapReduce的工作過程:MapReduce程序1目的:將輸入轉(zhuǎn)換為CrawlDatum格式輸入:URL文件Map(line)-><URL,CrawlDatum>Reduce()合并多重的URL輸出:臨時(shí)的CrawlDatum文件MapReduce程序2目的:合并上一步產(chǎn)生的臨時(shí)文件到新的DB輸入:上次MapReduce輸出的CrawlDatumMap()過濾重復(fù)的URLReduce()合并兩個(gè)CrawlDatum到一個(gè)新的DB輸出:CrawlDatum生成抓取列表(Generate)(1)從CrawlDB數(shù)據(jù)庫(kù)中將URL取
53、出并按預(yù)設(shè)規(guī)則進(jìn)行過濾。(2)對(duì)URL進(jìn)行降序排列;(3)將排列列表寫入segments目錄中。抓取內(nèi)容(Fetch)(1)對(duì)segments目錄下的抓取列表依次執(zhí)行抓?。唬?)抓取過程中,頁(yè)面的URL地址可能會(huì)發(fā)生跳轉(zhuǎn),從而需要重定向URL地址;本系統(tǒng)支持帶有一次跳轉(zhuǎn)的簡(jiǎn)單表單登陸的抓取,需要在配置文件中設(shè)置對(duì)應(yīng)的相關(guān)信息;復(fù)雜的登陸需要分析登陸過程,寫出相對(duì)應(yīng)的網(wǎng)絡(luò)協(xié)議插件。(3)抓取過程采用多線程方式進(jìn)行,F(xiàn)etch操作過程中得到頁(yè)面源文件后同時(shí)也調(diào)用Parse操作。分析處理內(nèi)容(Parse)使用對(duì)應(yīng)的插件解析segments目錄中由Fetch得到的頁(yè)面,并進(jìn)行整理,將頁(yè)面分解為pars
54、e-date和parse-text, parse-date中保存的是頁(yè)面的題名、作者、日期、鏈接等內(nèi)容;parse-text中保存的是頁(yè)面的文本內(nèi)容。本系統(tǒng)用戶可對(duì)種子站點(diǎn)的各個(gè)子站點(diǎn)進(jìn)行分析,自動(dòng)進(jìn)行分類,訂制子站點(diǎn)抓取的內(nèi)容,提高搜索主題相關(guān)度。過濾跟主體不相關(guān)的鏈接。更新CrawlDB庫(kù)(Update)根據(jù)segments目錄下crawl_fetch目錄和crawl_parse目錄中的內(nèi)容,對(duì)CrawlDB進(jìn)行更新,增加新的URL。轉(zhuǎn)化鏈接(Invert Links)Invert Links操作用來更新LinkDB,為建立索引的工作提供準(zhǔn)備。本系統(tǒng)實(shí)現(xiàn)mapreduce的pagerank
55、算法,將pagerank作為一個(gè)獨(dú)立的索引項(xiàng)添加到nutch默認(rèn)的lucene排序算法中。2、分布式索引是實(shí)現(xiàn)檢索前的必要步驟。對(duì)于爬取的網(wǎng)頁(yè)需要先進(jìn)行解析并建立索引。流程如下: 索引流程圖分布式索引操作從非結(jié)構(gòu)化文檔解析開始,提取數(shù)據(jù)庫(kù)的文本內(nèi)容創(chuàng)建相應(yīng)的Document實(shí)例,用IK分詞工具對(duì)漢字實(shí)行中文分詞,最后將分詞存入段結(jié)構(gòu)。為了提高分布式檢索的性能,需要進(jìn)行內(nèi)容評(píng)分排序,本系統(tǒng)用lucene內(nèi)部評(píng)分機(jī)制,實(shí)現(xiàn)mapreduce的pagerank算法,將pagerank作為一個(gè)獨(dú)立的索引項(xiàng)添加到nutch中;分布式索引系統(tǒng)的設(shè)計(jì)基于Map/Reduce編程模型并行實(shí)現(xiàn),爬行結(jié)果會(huì)以鍵值
56、對(duì)(key=URL,value=Content)形式傳遞進(jìn)行索引,首先JobTracker以key=URL分割網(wǎng)頁(yè)內(nèi)容,然后各個(gè)TaskTracker啟動(dòng)Map任務(wù)處理分配到的網(wǎng)頁(yè)數(shù)據(jù),生成相應(yīng)倒排索引片段,最后Reduce將各個(gè)Slave節(jié)點(diǎn)處理得到的索引片段合并為一個(gè)索引整體并保存在分布式文件系統(tǒng)HDFS中。(1)非結(jié)構(gòu)文檔解析Lucene實(shí)現(xiàn)索引需要對(duì)文檔格式進(jìn)行解析,本系統(tǒng)采用ApacheTika插件自動(dòng)判斷文章類型,調(diào)用相應(yīng)的類進(jìn)行文本內(nèi)容提取,創(chuàng)建對(duì)應(yīng)的Document實(shí)例,在Document實(shí)例對(duì)象中拆分文本內(nèi)容并用其創(chuàng)建多個(gè)Field實(shí)例,文檔的標(biāo)題、作者、摘要、正文以及關(guān)鍵字
57、等都屬于Field域,這些域值作為索引項(xiàng)通過IndexWriter對(duì)象的addDocument方法傳遞給Lucene實(shí)現(xiàn)索引,最終會(huì)以搜索結(jié)果的形式呈現(xiàn)給用戶。除了上面提及的常用文檔解析,還有ZIP壓縮包、RTF等相關(guān)格式文件的解析; nutch功能強(qiáng)大,可提供圖像和多數(shù)音頻文件的轉(zhuǎn)換。(2)分詞實(shí)現(xiàn)模塊solr基于 Lucene開發(fā),可以很好的支持英文分詞。對(duì)于中文分詞,本文將solr和IKAnalyzer分詞器集成實(shí)現(xiàn)中文分詞。修改schema.xml,添加如下配置: <fieldType name="text_ik" class="solr.TextF
58、ield"> <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>(3)MapReduce實(shí)現(xiàn)PageRank內(nèi)容評(píng)分排序算法Nutch抓取網(wǎng)頁(yè)后將網(wǎng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024保安服務(wù)合同(范本)公司保安合同范本
- 2024年丙丁雙方關(guān)于購(gòu)買房產(chǎn)合同標(biāo)的的協(xié)議書
- 2024年簡(jiǎn)單貨物運(yùn)輸合同格式
- 2024年度金融風(fēng)險(xiǎn)管理系統(tǒng)定制開發(fā)合同
- 2024合同補(bǔ)充協(xié)議
- 2024年協(xié)議離婚應(yīng)當(dāng)注意的要點(diǎn)
- 網(wǎng)吧轉(zhuǎn)讓合同范本
- 律師代理公司股票上市合同范本
- 2024日本留學(xué)租房合同簽訂須知
- 2024借款居間服務(wù)合同
- 20S805-1 雨水調(diào)蓄設(shè)施-鋼筋混凝土雨水調(diào)蓄池
- MOOC 法理學(xué)-西南政法大學(xué) 中國(guó)大學(xué)慕課答案
- 中華民族共同體概論課件專家版3第三講 文明初現(xiàn)與中華民族起源(史前時(shí)期)
- 消防安全 牢記心間
- 腳手架搭設(shè)及驗(yàn)收(匯編)
- 零星維修工程施工組織設(shè)計(jì)
- (高清版)DZT 0399-2022 礦山資源儲(chǔ)量管理規(guī)范
- 五年級(jí)上冊(cè)數(shù)學(xué)教學(xué)設(shè)計(jì)-植樹問題 人教版
- 全面質(zhì)量管理培訓(xùn)-(完整版)
- 社區(qū)兒童健康管理案例分析報(bào)告
- 蘇教版四年級(jí)上冊(cè)豎式計(jì)算400題及答案
評(píng)論
0/150
提交評(píng)論