【问题标题】:what is going on inside of Nutch 2?Nutch 2 内部发生了什么?
【发布时间】:2012-07-27 22:22:19
【问题描述】:

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

【问题讨论】:

    标签: algorithm analysis nutch infrastructure


    【解决方案1】:

    简答

    简而言之,他们开发了一种网络爬虫,旨在非常有效地从多台计算机环境中爬取网络(但也可以在单台计算机上运行)。

    您可以开始抓取网络,而无需知道他们是如何实现的。

    您引用的页面描述了它是如何实现的。

    背后的技术

    他们使用 Hadoop,这是一个开源 Java 项目,其设计与 MapReduce 相同。 MapReduce 是 Google 用来抓取和组织网络的技术。

    我参加了一些关于 MapReduce/Hadoop 的讲座,不幸的是,我不知道此时是否有人可以用完整且易于理解的方式来解释它(它们有点相反)。

    查看MapReduce 的维基百科页面。

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

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

    所有这些任务都是同时完成的,并且每台计算机都被分配了适当的工作量以使其始终处于占用状态。

    如何抓取

    由 4 个工作组成:

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

    *生成

    从包含您要开始抓取的页面的网页列表开始:“Webtable”。

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

    从站获取分配给它的网页并且:

    1. 是否已经生成?如果是这样,请跳过它。
    2. 标准化网址,因为“http://www.google.com/”和“http://www.google.com/../”实际上是同一个网页。
    3. 将初始分数与网页一起返回给 Master。

    (Master在将网页发送给它的slave时对网页进行分区,以便它们同时完成)

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

    *获取

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

    从站从 Internet 获取每个 URL 的速度与 Internet 连接允许的速度一样快,它们为每个域都有一个队列。

    他们将 URL 与网页的 HTML 文本一起返回给 Master。

    *解析

    Master 查看 webtable 中的每个网页,如果标记为 fetched,则将其发送给其 slave 进行解析。

    slave首先检查它是否已经被另一个slave解析,如果是则跳过它。

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

    *更新数据库

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

    slave 接收这些解析后的 URL,根据远离这些页面的链接数(以及这些链接附近的文本)为它们计算分数,然后将 Url 和分数发送回 Master(按分数排序当它因为分区而回到主服务器时)。

    主人根据从其他页面到这些页面的链接数来计算和更新网页分数。

    master 将这些全部存储到数据库中。

    重复

    当页面被解析时,来自这些网页的链接被添加到 webtable 中。您现在可以仅在尚未查看的页面上重复此过程,以继续扩展您访问过的页面。经过以上四个步骤的足够迭代,最终您将到达大部分 Internet。

    结论

    MapReduce 是一个很酷的系统。

    为了使其尽可能高效,我们付出了很多努力。

    他们可以处理在工作过程中出现故障的计算机,并将工作重新分配给其他从站。他们可以处理一些比其他奴隶更快的奴隶。

    如果效率更高,Master 可能会决定在自己的机器上执行从机的任务,而不是将其发送给从机。通讯网络非常先进。

    MapReduce 让您编写简单的代码:

    定义一个 Mapper、一个可选的 Partitioner 和一个 Reducer。

    然后让 MapReduce 找出如何最好地利用它可以访问的所有计算机资源来做到这一点,即使它是一台互联网连接速度较慢的计算机或 kila 集群。 (甚至可能是巨型集群)。

    【讨论】:

    • 谢谢,真的很有帮助。但还有一件事。你能解释一下“更新数据库”部分提到的“分数”吗?它使用 tf*idf 算法吗?(我不这么认为)它背后的算法是什么?
    • @Soroush 我不确定他们使用什么来确定分数,您链接的文档没有描述它,可能在不同的文档中。但是,您可能可以将自己的评分代码插入到爬虫中。它最初会在生成步骤中对 URL 进行评分。接下来,它通过锚标记中的文本和页面链接到的 URL 进行评分,最后通过链接到该页面的 URL 进行评分。你可以通过任何方式得分。 Google 使用的评分标准是PageRank
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多