我渴望知道(并且必须知道)关于nutch及其算法(因为它与我的项目有关),它用于获取,分类,......(通常是爬行)。
我阅读了this材料,但有点难以理解
是否有人能以完整且易于理解的方式向我解释这一点?
提前谢谢。
答案 0 :(得分:18)
简而言之,他们开发了一个webcrawler,旨在从许多计算机环境中非常有效地抓取Web(但也可以在一台计算机上运行)。
您可以开始抓取网络,而无需了解他们是如何实施的。
您引用的页面描述了它的实现方式。
他们使用Hadoop,这是一个开源的java项目,它是按照MapReduce的相同方式设计的。 MapReduce是Google用于抓取和整理网络的技术。
我参加了一些关于MapReduce / Hadoop的讲座,不幸的是,我不知道现在是否有人能够以一种完整且易于理解的方式解释它(它们有点对立)。
查看MapReduce的维基百科页面。
基本思想是将作业发送到主节点,主服务器将工作分成几部分并将其发送(映射)到执行其分配的子任务的各个工作节点(其他计算机或线程),然后将子结果发送回Master。
一旦主节点获得所有子结果(或某些子结果),它就会开始将它们(减少它们)组合成最终答案。
所有这些任务都是在同一时间完成的,并且每台计算机都有适当的工作量来保持它的整个时间。
包含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。 (甚至可能是超级集群)。