Nutch如何与Hadoop集群合作?

时间:2012-04-28 05:04:47

标签: hadoop nutch

所有 我想知道nutch如何使用hadoop集群。它如何将作业拆分到其他节点?它如何确保群集中的不同节点不会请求相同的URL?
谢谢你。

1 个答案:

答案 0 :(得分:5)

nutch的阶段是: 注入 - >生成 - >获取 - >解析 - >更新 - >索引

这些Fetch阶段是nutch发送url请求的地方(因此我将只谈论这个阶段并在答案中生成阶段。)

生成阶段会在crawldb中创建网址的提取列表。在创建fetchlist时,属于同一主机的url通常属于同一分区,因为分区功能基于主机名。因此,最终的获取列表将如下所示:

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

现在,当Fetch阶段读取这些fetchlists时,每个fetchlist由/分配给一个获取阶段的映射器处理。所以,

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

如果获取阶段的映射器获取主机A的网址,则其他地图不会包含同一主机的网址。当然,每个地图都可以包含多个主机的网址,但没有其他映射器将有来自这些主机的网址。

现在深入挖掘fetch的映射器:

它将包含n个主机h1,h2,... hn的网址。然后每个主机形成fetchqueues。所有网址(获取项目)都填充在各自主机的fetchqueue中。 Fetcher线程在fetchqueues上进行轮询,从那里获取URL并发送请求并将结果写回hdfs。完成此操作后,他们会查找可以处理的其他fetchitems(url)。

我认为我可以设法以可理解的方式陷入困境。有关详细信息,请参阅Fetcher.java代码以了解其工作原理。

注意:网址也可以根据IP进行分组。甚至你可以调整以使nutch不基于主机名/ IP对URL进行分组。这些都取决于你的配置。默认情况下,它将使用主机名对URL进行分组。