一。topn job:對urls預處理並取topn urls by score decending.
map:-> 。urls預處理和格式轉換
a.url filter
b.初步處理是否fetch(當fetchtime 比當前時間滯後才fetch)
c.抓取間隔處理。如果 在crawl.gen.delay時間範圍內,則不會再將次雲抓取,這個也是索引實時度的乙個主要引數 。/7days/
d.scoring filter 作為sort value.其中link and opic只是簡單地利用datum.getscore() * initsort返回。兩者預設都是1.0
e.score threshold控制 。目前沒有設定,作為nan值處理.
f.更新_ngt_;同時轉換輸出格式。
partition:利用urlpartitioner對url根據partition.url.mode進行hash,結果將導致相同的host(host或ip)的urls分到相同的red上去。
red:根據 topn要求,對每個red進行期望(mean)計算,所以所有red得到的不是準確的topn值。
對於生成的segnu相同的情況下,生成的臨時結果fetchlist-segnum會將相關的red結果存放在同一檔案下。
-->
note:decreasingfloatcomparator
二。parition job(其實是生成segment name及其中的crawl_generate資料)
p:同topn job
r:convert -->
sequencefileoutputformat
note:這job使用了hashcomparator作為outputkeycomparator,而它是優先於red執行的,他將host比url中的其它部分增加了權重,所以得到的結果是不同site的urls更加有均勻地分發到各red中?
也許會問,為什麼topn job中的part已經相同host的urls均勻分布l在各個red中了而這裡又搞亂呢?但我認為前者是不必要的,況且這樣造成了如果host不均勻時出現某個red負載較重;而最關鍵的是這裡的part,所以它是乙個按url hash的值,而且增加了host的權重。
[三。update crawldb job](
此job是update時才執行)
過程是:如果存在舊的crawldatum則保留下來,同時復位 _ngt_;也具備url deduplicate功能。
將injector的結果與上述的結果合併,可以看出兩者都 是以輸出的,所以是可以合併 。
所以結果是:,note:此結果是存放在crawldb/current下,所以以mapfileoutputformat與injector的保持一致。
topn job:
map -> (在map後直接呼叫)part
-> (所有map完成後逐個partition進行)sort -> red -> (red後直接呼叫) outputformat
結果輸出:
bnitz@leibnitz-laptop:~/search_engine/nutch/mynutch1.2$ hadoop fs -text output/debug/segments/20110706014523/crawl_generate/part-00000
hadoop home:
version: 7
status: 1 (db_unfetched)
fetch time: mon jul 04 14:57:19 cst 2011
modified time: thu jan 01 08:00:00 cst 1970
retries since fetch: 0
retry interval: 2592000 seconds (30 days)
score: 1.0
signature: null
metadata: _ngt_: 1309887693964
version: 7
status: 1 (db_unfetched)
fetch time: mon jul 04 14:57:19 cst 2011
modified time: thu jan 01 08:00:00 cst 1970
retries since fetch: 0
retry interval: 2592000 seconds (30 days)
score: 1.0
signature: null
metadata: _ngt_: 1309887693964
nutch2 2 1抓取流程
整體流程 injectorjob generatorjob fetcherjob parserjob dbupdaterjob solrindexerjob injectorjob 從檔案中得到一批種子網頁,把它們放到抓取資料庫中去 generatorjob 從抓取資料庫中產生要抓取的頁面放到抓取佇...
Generator函式在流程控制中的應用
接手了平台其他相關遊戲的 流程控制相互交錯,不易理解 難以維護。可能是剛做遊戲的原因,如果你們有什麼更簡單的流程控制方法,歡迎分享 我下意識的就想到了generator函式的特性,感覺用著這裡非常方便 以前一直覺得這是個非同步流程控制中過度性質的方法,並且需要配合co才能自動執行,所以基本沒實際用過...
(四)Scrapy的抓取流程 Engine
engine.py所在的目錄,抓取流程中的主要模組。executionengine的 init 方法,初始化抓取流程中用到的各個控制項。還是從上一章裡的open spider和start兩個方法來看流程。1 open spider 首先會根據spider物件裡的start urls獲取到初始鏈結,然...