Nutch 0 8筆記 1 必知必會

2021-04-16 19:00:21 字數 3403 閱讀 1045

江南白衣

nutch是乙個基於lucene,類似google的完整網路搜尋引擎解決方案,基於hadoop的分布式處理模型保證了系統的效能,類似eclipse的外掛程式機制保證了系統的可客戶化,而且很容易整合到自己的應用之中。

nutch 0.8 完全使用hadoop重寫了骨幹**,另外很多地方作了合理化修正,非常值得公升級。

nutch 0.7.2的中文安裝文件滿街都是,nutch 0.8的安裝文件見tutorial (0.8) , 要注意兩點:

一是 crawl命令裡的urls引數從指定檔案變為了指定目錄, 即原來的urls 要改存到urls/foo 裡。

二是 nutch-default.xml裡http.agent.name屬性預設為空,必須在nutch-site.xml中為該屬性設值,否則會出錯。

注意nutch 爬行時的資訊用log4j輸出在/logs 目錄下了,預設不再直接輸出到螢幕,除非你在配置檔案里設fetcher.verbose為true。

luke(http://www.getopt.org/luke) 是乙個必備的索引閱讀工具。

最後,nutch 0.8的recawl 指令碼也不同了。

nutch的文件不多,而且多是安裝文件,要深入nutch,就必須一字不漏的閱讀:

introduction to nutch, part 1 crawling  和 introduction to nutch, part 2 searching

然後就是看原始碼了,好在nutch的原始碼非常均勻,簡短,沒有花哨的技巧,很容易把事情看明白。

首先理解nutch的三個資料目錄:

1.crawdb,linkdb是web link目錄,存放url 及url的互聯關係,作為爬行與重新爬行的依據,頁面預設30天過期。

2.segments是主目錄,存放抓回來的網頁。頁面內容有bytes的raw content 和 parsed text的形式。nutch以廣度優先的原則來爬行,因此每爬完一輪會生成乙個segment目錄。

3.index是lucene的索引目錄,是indexs裡所有index合併後的完整索引,注意索引檔案只對頁面內容進行索引,沒有進行儲存,因此查詢時要去訪問segments目錄才能獲得頁面內容。

爬行過程在introduction to nutch, part 1 crawling 裡已有詳細說明,或許直接看crawl類來理解爬行的過程。

nutch用入口位址,位址正規表示式,搜尋深度三種形式來限制

1.fetcher類, 在run()裡多執行緒執行fetcherthread,並呼叫恰當的protocol外掛程式(支援http,ftp等協議)獲取內容,呼叫恰當的parser將內容分析為文字,然後把內容放到fetcheroutput類裡,最後由fetcheroutputformat類定義寫盤到segments的過程。

2.indexer類,應用hadoop遍歷所有segments 目錄,將parsedata檔案序列化成parsedata類,從中獲得各種資料然後呼叫外掛程式進行索引,最後仍然由ouputformat類完成寫入索引的工作。

注意,如果你僅想使用nutch的爬蟲,而不是其索引功能,可以仿照indexer重寫自己的實現,比如把segments內容直接搬進資料庫。

3.nutch 每條索引記錄的字段

url: 作為唯一標標識值,由basicindexingfilter類產生。

segment:由indexer類產生。nutch抓回來的頁面內容放在segments目錄,lucene只會索引,不會store原文內容,因此在查詢時要以segment與url作為外來鍵,由fetchedsegments類根據hitsdetail從segments目錄獲得content。

boost:優先順序,由indexer類呼叫外掛程式計算產生。

title:顯示標題,在basicindexingfilter外掛程式中被索引和儲存。

content: 主要的被搜尋項,在basicindexingfilter外掛程式中被索引。

nutch提供了乙個fascade的nutchbean類供我們使用,一段典型的**如下

nutchbean bean 

=new

nutchbean();

query query 

=query.parse(args[

0]);

hits hits 

=bean.search(query, num_hits,

"title",

true

);for

(inti =

0; i 

<

hits.getlength(); i

++) 

這裡nutchbean為我們做了幾樣事情:
一是按title field來排序

二是支援分布式查詢,如果有配置servers,就會使用hadoop的ipc系統,呼叫所有server上的nutchbeans,最後規約出總的結果。

三是每個站點只顯示分數最高的一頁,如果使用者還想看同站的其他結果,就需要訪問morehit***culde。

四是生成summary,讀取segments目錄,按segments和url 獲得content, 並按一定演算法抽取出包含關鍵字的文件片斷。

nutch的原始碼很容易修改和重新編譯,注意新編譯的class要壓回nutch-0.8.job(實際是乙個jar)才能生效。

nutch的外掛程式機制及度類似eclipse, 詳看http://wiki.apache.org/nutch/writingpluginexample,只要實現某個外掛程式介面,然後在plugins.xml裡定義class,擴充套件點和依賴的jar,如="

index-basic

"version="

1.0.0

"provider-name="

nutch.org

">="

index-basic.jar

">="

*"/>="

nutch-extensionpoints

"/>="

org.apache.nutch.indexer.basic

"name="

nutch basic indexing filter

"point="

org.apache.nutch.indexer.indexingfilter

">="

basicindexingfilter

"class="

org.apache.nutch.indexer.basic.basicindexingfilter

"/>

大資料day08筆記

day01 大資料及linux安裝 現在的社會發展相當迅速,科技發達,資訊流通,使得人們之間的交流越來越密切,生活也越來越方便,在智慧型手機 智慧型穿戴裝置基本普及的高科技時代的背景下,大資料應運而生。未來的時代將不再是it時代,而是dt data technology 時代。各個行業和領域都已經被...

python基礎語法 day08(筆記)

乙個程式模組太多,需要建立乙個資料夾來管理這些模組,就有了包的概念。什麼是包?可以將多個具有相似或者有關聯的多個模組放在乙個資料夾中,便於統一管理。這個資料夾我們就可以稱之為包 我的test2模組 test1.py y 我的test1模組 test.py from test2 import x im...

動手學深度學習 Task08筆記彙總

終於來到了我感興趣的東西,如何教會機器進 感分析。目標是通過給定的不定長文字序列輸出情緒類別,運用了預訓練的詞向量和多隱藏層的雙向rnn和cnn,是詞嵌入的下游應用。隨機改變樣本從而降低模型對屬性的依賴性,並且也可以擴大資料集規模。例如 翻轉 裁剪 變化顏色 亮度 對比度 跑合度 色調 以及以上各種...