【发布时间】:2012-07-27 22:22:19
【问题描述】:
我渴望了解(并且必须了解)用于获取、分类、...(通常是抓取)的 nutch 及其算法(因为它与我的项目有关)。
我阅读了this 材料,但有点难以理解。
有没有人可以用完整且易于理解的方式向我解释这一点?
提前致谢。
【问题讨论】:
标签: algorithm analysis nutch infrastructure
我渴望了解(并且必须了解)用于获取、分类、...(通常是抓取)的 nutch 及其算法(因为它与我的项目有关)。
我阅读了this 材料,但有点难以理解。
有没有人可以用完整且易于理解的方式向我解释这一点?
提前致谢。
【问题讨论】:
标签: algorithm analysis nutch infrastructure
简而言之,他们开发了一种网络爬虫,旨在非常有效地从多台计算机环境中爬取网络(但也可以在单台计算机上运行)。
您可以开始抓取网络,而无需知道他们是如何实现的。
您引用的页面描述了它是如何实现的。
他们使用 Hadoop,这是一个开源 Java 项目,其设计与 MapReduce 相同。 MapReduce 是 Google 用来抓取和组织网络的技术。
我参加了一些关于 MapReduce/Hadoop 的讲座,不幸的是,我不知道此时是否有人可以用完整且易于理解的方式来解释它(它们有点相反)。
查看MapReduce 的维基百科页面。
基本思想是将作业发送到主节点,主节点将工作分解为多个部分并将其发送(映射)到执行其分配的子任务的各个工作节点(其他计算机或线程),然后将子结果发送回 Master。
一旦主节点获得所有子结果(或一些子结果),它就会开始将它们组合(减少)到最终答案中。
所有这些任务都是同时完成的,并且每台计算机都被分配了适当的工作量以使其始终处于占用状态。
由 4 个工作组成:
从包含您要开始抓取的页面的网页列表开始:“Webtable”。
主节点将该列表中的所有页面发送到其从属节点(但如果两个页面具有相同的域,则它们将被发送到同一个从属节点)。
从站获取分配给它的网页并且:
(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 集群。 (甚至可能是巨型集群)。
【讨论】: