2012-04-28 37 views

回答

5

的nutch的階段是: 進樣 - >生成 - >獲取 - >解析 - >更新 - >索引

這些當中提取相是其中的nutch發送請求的URL的位置(並且因此我會只是在談論這個階段,並在回答中產生階段。)

生成階段創建crawldb中的url的獲取列表。創建fetchlist時,屬於同一主機的URL通常落在同一分區中,因爲分區功能基於主機名。所以,最終取名單將是這樣的:

fetch list 1 : all urls of host a1, b1, c1 
fetch list 2 : all urls of host a2, b2, c2 
............. 
............. 

現在,當取相讀取這些fetchlists,通過/分配獲取階段的一個映射每個fetchlist處理。所以,

number of reducers in generate partition phase 
         = the number of fetchlists created 
         = number of maps in fetch phase 

如果取相映射器獲取主機A的URL的一羣,沒有其他的地圖都會有相同的主機的網址。 Offcourse,每張地圖可以有多個主機的網址,但是沒有其他的地圖製作者會從這些主機獲得網址。

現在深挖的映射器獲取:

這將有發言權N個主機H1,H2的網址,... HN。然後,根據主機形成fetchqueue。所有的URL(獲取項目)都填充到它們各自主機的提取隊列中。 Fetcher線程在fetchqueue上進行輪詢,從那裏獲取urls併發送請求並將結果寫回hdfs。完成後,他們會尋找其他可以處理的高級網頁(urls)。

我認爲我可以設法以可理解的方式把混亂。有關更多詳細信息,請參閱Fetcher.java工作代碼。

注意:網址也可以基於IP進行分組。即使你可以調整,以使nutch不會根據主機名/ IP對網址進行分組。這兩件事都取決於年齡配置。默認情況下,它將使用主機名來分組網址。