2012-04-28 38 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对网址进行分组。这两件事都取决于年龄配置。默认情况下,它将使用主机名来分组网址。