nutch原始碼閱讀 5 Injector總結

2021-09-01 17:46:56 字數 1616 閱讀 8223

nutch的inject 有二個job 

第乙個job 如下圖 

1  url是否有tab分割的k-v 對如果有記錄下來, 

2  如果配置了過濾使用 urlnormalizers和 urlfilters 對url 進行格式化和過濾, 

3  如果過濾的url 不為空則建立crawldatum物件,狀態 status_injected,設定fetcher 間隔時間從fetchdb.fetch.interval.default  配置中取,如果沒有預設2592000s 為30 天 

4  設定fectchtime  為當前時間  datum.setfetchtime(curtime); 

5 設定 score  根據db.score.injected 配置分數,預設為1 

這個job 只有map 沒有reduce,所以使用預設的reduce 

map 輸入 : 存放url的目錄 如果 bin/nutch  crawl urls -dir crawl -topn 1  -depth 1 這個命令 輸入是urls,預設的使用textinputformat輸入的 key:偏移量 value:一行的文字   ,map的輸出為 key :text  為url, value:crawldatum 

沒有設定reduce 使用預設的reducer 

reduce輸出 :mapred.temp.dir 配置的屬性值目錄下面的(inject-temp-當前時間)下面 輸出為 key :text  為url, value:list

第二個job如下圖 

map :crawldbfilter  功能如下 

輸入目錄為引數crawldb/current 和上次job的輸出目錄 

key:text value:crawldatum  

如果設定了urlnormalizers=true 對url進行normalize 

如果設定了urlfiltering=true 對url進行過濾 

如果url不為空 寫入 

key : text  為url  value:  crawldatum 

reduce :injectreducer 

對乙個key 的value,設定狀態,如果value中的crawldatum 如果狀態是crawldatum.status_injected 則設定狀態為crawldatum.status_db_unfetched 

裡面的多值去重複,否則不設定狀態,使用當前的狀態,如果存在多值,如果有狀態不是crawldatum.status_injected,使用這個狀態,否則使用    crawldatum.status_db_unfetched,寫入 

輸出目錄為   crawldb 下面的先建乙個隨機數命名的目錄 

path newcrawldb = 

new path(crawldb, 

integer.tostring(new random().nextint(integer.max_value))); 

crawldb.install 替換 current目錄 

邏輯如下 

1 如果crawldb 下面有old目錄刪除old目錄 

2 把crawldb 下面的current目錄變成old目錄 

3 把job是輸出目錄變成current目錄刪除old目錄

nutch原始碼閱讀 1 Crawl

org.apache.nutch.crawl.crawl實現的是乙個完成的抓取過程,所以由它開始。perform complete crawling and indexing to solr given a set of root urls and the solr parameter respec...

nutch原始碼閱讀 7 Generator

繼續向下看,第二個job read the subdirectories generated in the temp output and turn them into segments listgeneratedsegments new arraylist 讀取上個job生成的多個fetchlis...

tomcat原始碼閱讀5

org.apache.catalina.cluster.authenticator包 clustersinglesignon 每個valve支援使用者單點登入在集群節點上,使用者在web應用程式上經過驗證的安全標誌可以在同乙個安全域的其它集群節點上使用 clustersinglesignonlist...