我渴望知道(并且必须知道)nutch 及其用于获取、分类、...(通常是爬行)的算法(因为它与我的项目有关)。
我读了这个材料,但有点难以理解。
有没有人可以以完整且易于理解的方式向我解释这一点?
提前致谢。
1 回答
简答
简而言之,他们开发了一种网络爬虫,旨在非常有效地从多台计算机环境中爬取网络(但也可以在单台计算机上运行)。
您可以开始爬网,而无需知道他们是如何实现的。
您引用的页面描述了它是如何实现的。
背后的技术
他们使用 Hadoop,这是一个开源 Java 项目,其设计与 MapReduce 相同。MapReduce 是 Google 用来抓取和组织网络的技术。
我参加了一些关于 MapReduce/Hadoop 的讲座,不幸的是,我不知道此时是否有人可以用完整且易于理解的方式来解释它(它们有点相反)。
查看MapReduce的维基百科页面。
基本思想是将作业发送到主节点,主节点将工作分解并发送(映射)到执行其分配的子任务的各个工作节点(其他计算机或线程),然后发送将子结果返回给法师。
一旦主节点获得所有子结果(或一些子结果),它就会开始将它们组合(减少它们)到最终答案中。
所有这些任务都是同时完成的,并且每台计算机都被分配了适当的工作量以使其始终处于占用状态。
如何爬行
由4个工作组成:
- 产生
- 拿来
- 解析
- 更新数据库
*产生
从包含您要开始抓取的页面的网页列表开始:“Webtable”。
主节点将该列表中的所有页面发送到其从属节点(但如果两个页面具有相同的域,则它们将被发送到同一个从属节点)。
从站获取其分配的网页并且:
- 这已经生成了吗?如果是这样,请跳过它。
- 规范化 URL,因为“http://www.google.com/”和“http://www.google.com/../”实际上是同一个网页。
- 将初始分数与网页一起返回给 Master。
(Master在将网页发送给它的从属时对网页进行分区,以便它们同时完成)
Master 现在选择 topN(也许用户只想从 10 个初始页面开始),并将它们标记为在 webtable 中选择。
*拿来
Master 查看 webtable 中的每个 URL,将标记的 URL 映射到 slave 以处理它们。
从站从 Internet 获取每个 URL 的速度与 Internet 连接允许的速度一样快,它们为每个域都有一个队列。
他们将 URL 与网页的 HTML 文本一起返回给 Master。
*解析
Master 查看 webtable 中的每个网页,如果它被标记为 fetched,则将其发送给它的 slave 进行解析。
从站首先检查它是否已经被不同的从站解析,如果是则跳过它。
否则,它会解析网页并将结果保存到 webtable。
*更新数据库
Master 查看 webtable 中的每个网页,将解析后的行发送给它的 slave。
从站接收这些解析后的 URL,根据远离这些页面的链接数(以及这些链接附近的文本)为它们计算分数,并将 URL 和分数发送回主站(当它得到时按分数排序由于分区而回到主控器)。
主人根据从其他页面到这些页面的链接数计算和更新网页分数。
主人将这一切存储到数据库中。
重复
当页面被解析时,这些网页的链接被添加到 webtable 中。您现在可以仅在尚未查看的页面上重复此过程,以继续扩展您访问过的页面。经过以上四个步骤的足够迭代,最终您将到达大部分 Internet。
结论
MapReduce 是一个很酷的系统。
为了使其尽可能高效,我们付出了很多努力。
他们可以处理在工作过程中出现故障的计算机并将工作重新分配给其他从站。他们可以处理一些比其他奴隶更快的奴隶。
Master 可以决定在自己的机器上执行 slave 的任务,而不是将其发送给 slave,如果这样会更有效率的话。通讯网络非常先进。
MapReduce 允许您编写简单的代码:
定义一个 Mapper、一个可选的 Partitioner 和一个 Reducer。
然后让 MapReduce 弄清楚如何最好地利用它可以访问的所有计算机资源来做到这一点,即使它是一台互联网连接速度较慢的计算机或 kila 集群。(甚至可能是巨型集群)。