Nutch 2里面发生了什么?

时间:2012-07-27 22:22:20

标签: algorithm analysis nutch infrastructure

我渴望知道(并且必须知道)关于nutch及其算法(因为它与我的项目有关),它用于获取,分类,......(通常是爬行)。
我阅读了this材料,但有点难以理解 是否有人能以完整且易于理解的方式向我解释这一点? 提前谢谢。

1 个答案:

答案 0 :(得分:18)

简答

简而言之,他们开发了一个webcrawler,旨在从许多计算机环境中非常有效地抓取Web(但也可以在一台计算机上运行)。

您可以开始抓取网络,而无需了解他们是如何实施的。

您引用的页面描述了它的实现方式。

背后的技术

他们使用Hadoop,这是一个开源的java项目,它是按照MapReduce的相同方式设计的。 MapReduce是Google用于抓取和整理网络的技术。

我参加了一些关于MapReduce / Hadoop的讲座,不幸的是,我不知道现在是否有人能够以一种完整且易于理解的方式解释它(它们有点对立)。

查看MapReduce的维基百科页面。

基本思想是将作业发送到主节点,主服务器将工作分成几部分并将其发送(映射)到执行其分配的子任务的各个工作节点(其他计算机或线程),然后将子结果发送回Master。

一旦主节点获得所有子结果(或某些子结果),它就会开始将它们(减少它们)组合成最终答案。

所有这些任务都是在同一时间完成的,并且每台计算机都有适当的工作量来保持它的整个时间。

如何抓取

包含4个职位:

  1. 生成
  2. 解析
  3. 更新数据库
  4. *生成

    从包含您要开始抓取的网页的网页列表开始:“网络广告”。

    主节点将该列表中的所有页面发送到其从属设备(但如果两个页面具有相同的域,则将它们发送到同一个从属设备)。

    奴隶获取其指定的网页并:

    1. 这已经生成了吗?如果是这样,请跳过它。
    2. 规范化网址,因为“http://www.google.com/”和“http://www.google.com/../”实际上是同一网页。
    3. 将初始分数与网页一起返回给主人。
    4. (主页在将网页发送给其从属网时对网页进行分区,以便它们同时完成)

      Master现在选择topN(也许用户只想从10个初始页面开始),并将它们标记为在webtable中选择。

      *取

      Master查看webtable中的每个URL,将标记的URL映射到slave上以进行处理。

      Slaves从互联网上获取每个URL的速度与互联网连接允许的一样快,他们为每个域都有一个队列。

      他们将网址以及网页的HTML文本返回给主页。

      *解析

      Master查看webtable中的每个网页,如果它被标记为fetched,它会将其发送给它的slave来解析它。

      奴隶首先检查它是否已被另一个奴隶解析,如果是这样,则跳过它。

      否则,它会解析网页并将结果保存到网表。

      *更新数据库

      Master查看webtable中的每个网页,将解析后的行发送给它的从属。

      奴隶接收这些解析后的网址,根据远离这些网页的链接数量(以及这些链接附近的文字)计算得分,然后将网址和分数发送给主人(按分数排序)当因为分区而回到主人那里时。)

      主人根据与其他网页的链接数量计算和更新网页分数。

      主服务器将此全部存储到数据库中。

      重复

      解析页面后,这些网页中的链接被添加到网页表中。您现在可以仅在尚未查看的页面上重复此过程,以继续扩展您访问过的页面。最后,在上述四个步骤的足够迭代之后,您将到达大部分互联网。

      结论

      MapReduce是一个很酷的系统。

      已经付出了很多努力使其尽可能高效。

      他们可以处理计算机在作业中断的情况,并将工作重新分配给其他奴隶。他们可以处理一些奴隶比其他奴隶更快。

      Master可以决定在自己的机器上执行奴隶的任务,而不是将其发送给奴隶,如果它更有效率的话。通信网络非常先进。

      MapReduce允许您编写简单的代码:

      定义Mapper,可选的Partitioner和Reducer。

      然后让MapReduce弄清楚如何最好地利用它可以访问的所有计算机资源,即使它是一台连接速度较慢的计算机或kila-cluster。 (甚至可能是超级集群)。