· 通過Map、Reduce,開發(fā)人員可以創(chuàng)建可以并行處理大量非結構化數(shù)據(jù)的程序,這些數(shù)據(jù)可以在分布式的處理器或獨立計算機上并行處理。MapReduce框架被劃分為兩個功能區(qū)域:
· Map(映射),一個將工作分發(fā)到分布式集群中的不同節(jié)點的功能。
· Reduce函數(shù):整理工作并將結果解析成單個值的功能。
Map、Reduce的主要優(yōu)點之一是它是容錯的,它通過監(jiān)視集群中的每個節(jié)點來實現(xiàn);每個節(jié)點都需要定期報告,完成的工作和狀態(tài)更新。如果一個節(jié)點保持比預期的時間,間隔更長的時間,那么主節(jié)點將會記錄并將工作分配給其他節(jié)點。
Apache Hadoop是一種使用Map、Reduce核心的開源框架,兩年后開發(fā)出來了。Hadoop最初是用來索引現(xiàn)在不知名的Nutch搜索引擎的,現(xiàn)在幾乎所有主要行業(yè)都使用Hadoop來進行大范圍的大數(shù)據(jù)工作。得益于Hadoop的分布式文件系統(tǒng)和紗線(另一個資源協(xié)商者),該軟件讓用戶可以在數(shù)千臺設備上處理大規(guī)模數(shù)據(jù)集,就好像它們都在一臺巨大的機器上一樣。
Nutch 是一個開源Java 實現(xiàn)的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬蟲。
· Nutch組成:
· 爬蟲crawler和查詢searcher。
· Crawler主要用于從網(wǎng)絡上抓取網(wǎng)頁并為這些網(wǎng)頁建立索引。
· Searcher主要利用這些索引檢索用戶的查找關鍵詞來產(chǎn)生查找結果。
· 兩者之間的接口是索引,所以除去索引部分,兩者之間的耦合度很低。
Crawler和Searcher兩部分盡量分開的目的主要是為了使兩部分可以分布式配置在硬件平臺上,例如將Crawler和Searcher分別放在兩個主機上,這樣可以提升性能。
Crawler 的重點在兩個方面,Crawler的工作流程和涉及的數(shù)據(jù)文件的格式和含義。數(shù)據(jù)文件主要包括三類,分別是web database(WebDB),一系列的segment加上index,三者的物理文件分別存儲在爬行結果目錄下的db目錄下webdb子文件夾內,segments 文件夾和index文件夾。那么三者分別存儲的信息是什么呢?
一次爬行會產(chǎn)生很多個segment,每個segment內存儲的是爬蟲Crawler在單獨一次抓取循環(huán)中抓到的網(wǎng)頁以及這些網(wǎng)頁的索引。Crawler爬行時會根據(jù)WebDB中的link關系按照一定的爬行策略生成每次抓取循環(huán)所需的fetchlist(Crawler根據(jù)WebDB生成一個待抓取網(wǎng)頁的URL集合),然后 Fetcher(下載線程)通過fetchlist中的URLs抓取這些網(wǎng)頁并索引,然后將其存入segment。Segment是有時限的,當這些網(wǎng)頁被 Crawler重新抓取后,先前抓取產(chǎn)生的segment就作廢了。在存儲中。Segment文件夾是以產(chǎn)生時間命名的,方便我們刪除作廢的 segments以節(jié)省存儲空間。
Index是Crawler抓取的所有網(wǎng)頁的索引,它是通過對所有單個segment中的索引進行合并處理所得的。Nutch利用Lucene技術進行索引,所以Lucene中對索引進行操作的接口對Nutch中的index同樣有效。但是需要注意的是,Lucene 中的segment和Nutch中的不同,Lucene中的segment是索引index的一部分,但是Nutch中的segment只是WebDB中各個部分網(wǎng)頁的內容和索引,最后通過其生成的index跟這些segment已經(jīng)毫無關系了。
Web database,也叫WebDB,其中存儲的是爬蟲所抓取網(wǎng)頁之間的鏈接結構信息,它只在爬蟲Crawler工作中使用而和Searcher的工作沒有 任何關系。WebDB內存儲了兩種實體的信息:page和link。Page實體通過描述網(wǎng)絡上一個網(wǎng)頁的特征信息來表征一個實際的網(wǎng)頁,因為網(wǎng)頁有很多個需要描述,WebDB中通過網(wǎng)頁的URL和網(wǎng)頁內容的MD5兩種索引方法對這些網(wǎng)頁實體進行了索引。Page實體描述的網(wǎng)頁特征主要包括網(wǎng)頁內的link數(shù)目,抓取此網(wǎng)頁的時間等相關抓取信息,對此網(wǎng)頁的重要度評分等。同樣的,Link實體描述的是兩個page實體之間的鏈接關系。
工作步驟 :
在Nutch中,Crawler操作的實現(xiàn)是通過一系列子操作的實現(xiàn)來完成的。這些子操作Nutch都提供了子命令行可以單獨進行調用。下面就是這些子操作的功能描述以及命令行,命令行在括號中。
1. 創(chuàng)建一個新的WebDb(admin db -create).
2. 將抓取起始URLs寫入WebDB中 (inject).
3. 根據(jù)WebDB生成fetchlist并寫入相應的segment(generate).
4. 根據(jù)fetchlist中的URL抓取網(wǎng)頁 (fetch).
5. 根據(jù)抓取網(wǎng)頁更新WebDb(updatedb).
6. 循環(huán)進行3-5步直至預先設定的抓取深度。