gpt4 book ai didi

hadoop - Nutch 如何与 Hadoop 集群协同工作?

转载 作者:可可西里 更新时间:2023-11-01 14:21:52 26 4
gpt4 key购买 nike

全部
我想知道nutch 是如何与hadoop 集群一起工作的。它如何将作业拆分到其他节点?它如何确保集群中的不同节点不会请求相同的 url?
感谢副词。

最佳答案

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

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

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

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

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

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

如果一个mapper在fetch阶段得到了主机A的一堆url,其他map就不会有同一主机的url。当然,每个map可以有多个host的url,但没有其他mapper将具有来自这些主机的 url。

现在深入研究 fetch 的映射器:

它将有 n 个主机 h1、h2、... hn 的 url。然后在每个主机的基础上形成提取队列。所有 url(获取项目)都填充在其各自主机的获取队列中。 Fetcher 线程轮询 fetchqueues,从那里获取 url 并发送请求并将结果写回 hdfs。完成后,他们会寻找其他可以处理的 fetchitems(url)。

我认为我可以设法以易于理解的方式解决问题。有关详细信息,请参阅 Fetcher.java工作代码。

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

关于hadoop - Nutch 如何与 Hadoop 集群协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com