Nutch主要分为两个部分:爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。 Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。
Crawler和Searcher两部分尽量分开的目的主要是为了使两部分可以分布式配置在硬件平台上,例如将Crawler和Searcher分别放在两个主机上,这样可以提升性能。
(1)Crawler
Crawler的重点在两个方面,Crawler的工作流程和涉及的数据文件的格式和含义。数据文件主要包括三类,分别是web database,一系列的segment以及index,三者的物理文件分别存储在爬行结果目录下的xxxdb文件夹,segments 文件夹和index文件夹内。
Web database,也叫WebDB,其中存储的是爬虫所抓取网页之间的链接结构信息,它只在爬虫Crawler工作中使用,而和Searcher的工作没有任何关系。WebDB内存储了两种实体的信息:page和link。Page实体通过描述网络上一个网页的特征信息来表征一个实际的网页,因为网页有很多个需要描述,WebDB中通过网页的URL和网页内容的MD5两种索引方法对这些网页实体进行了索引。Page实体描述的网页特征主要包括网页内的link数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。同样的,Link实体描述的是两个page实体之间的链接关系。WebDB构成了一个所抓取网页的链接结构图,这个图中Page实体是图的结点,而Link实体则代表图的边。
一次爬行会产生很多个segment,每个segment内存储的是爬虫Crawler在单独一次抓取循环中抓到的网页以及这些网页的索引。Crawler爬行时会根据WebDB中的link关系按照一定的爬行策略生成每次抓取循环所需的 fetchlist,然后Fetcher通过fetchlist中的URLs抓取这些网页并索引,然后将其存入segment。Segment是有时限的,当这些网页被Crawler重新抓取后,先前抓取产生的segment就作废了。在存储中。Segment文件夹是以产生时间命名的,方便我们删除作废的segments以节省存储空间。
Index是Crawler抓取的所有网页的索引,它是通过对所有单个segment中的索引进行合并处理所得的。Nutch利用Lucene技术进行索引,所以Lucene中对索引进行操作的接口对Nutch中的index同样有效。但是需要注意的是,Lucene中的segment和Nutch中的不同,Lucene中的segment是索引index的一部分,但是Nutch中的 segment只是WebDB中各个部分网页的内容和索引,最后通过其生成的index跟这些segment已经毫无关系了。
Crawler工作流程:
在分析了Crawler工作中设计的文件之后,接下来我们研究一下Crawler的抓取流程以及这些文件在抓取中扮演的角色。Crawler的工作原理主要是:首先Crawler根据WebDB生成一个待抓取网页的URL集合叫做 Fetchlist,接着下载线程Fetcher开始根据Fetchlist将网页抓取回来,如果下载线程有很多个,那么就生成很多个 Fetchlist,也就是一个Fetcher对应一个Fetchlist。然后Crawler根据抓取回来的网页对WebDB进行更新,根据更新后的 WebDB生成新的Fetchlist,里面是未抓取的或者新发现的URLs,然后下一轮抓取循环重新开始。这个循环过程可以叫做“产生/抓取/更新”循环。
指向同一个主机上Web资源的URLs通常被分配到同一个Fetchlist中,这样的话防止过多的Fetchers对一个主机同时进行抓取造成主机负担过重。另外Nutch遵守Robots Exclusion Protocol,网站可以通过自定义Robots.txt控制Crawler的抓取。
在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。这些子操作Nutch都提供了子命令行可以单独进行调用。下面就是这些子操作的功能描述以及命令行,命令行在括号中。
1. 创建一个新的WebDb (admin db -create).
2. 将抓取起始URLs写入WebDB中 (inject).
3. 根据WebDB生成fetchlist并写入相应的segment(generate).
4. 根据fetchlist中的URL抓取网页 (fetch).
5. 根据抓取网页更新WebDb (updatedb).
6. 循环进行3-5步直至预先设定的抓取深度。
7. 根据WebDB得到的网页评分和links更新segments (updatesegs).
8. 对所抓取的网页进行索引(index).
9. 在索引中丢弃有重复内容的网页和重复的URLs (dedup).
10. 将segments中的索引进行合并生成用于检索的最终index(merge).
Crawler详细工作流程是:在创建一个WebDB之后(步骤1), “产生/抓取/更新”循环(步骤3-6)根据一些种子URLs开始启动。当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤7-10)。在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。
其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?原因在于抓取的更新。比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。
(2)Searcher
Nutch crawler产生了三种主要的数据结构:
1. WebDB:包含pages和links的网络图。
2. segments集:包含了fetcher从web中获取的原始数据。
3. 合成的index:对segments进行索引和消重分析得到。
Nutch的搜索系统通过上述的segments和index完成搜索的功能。
分享到:
相关推荐
在实际应用中,由于Nutch的默认配置和工作流程可能存在效率问题,因此,理解其运行原理并进行优化是提高Nutch性能的关键。本文将详细探讨提高Nutch运行效率的原理与方法。 首先,我们要理解Nutch的运行过程。Nutch...
4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 5.2.1 索引...
Nutch搜索引擎的基本原理和组成是互联网搜索引擎开发领域的重要知识点。...在理解Nutch的基本原理和工作流程后,开发者可以更好地掌握其运行机制,进而利用Nutch进行更加深入的搜索引擎开发和研究。
### 基于Nutch的插件系统的原理分析 #### 一、引言 随着互联网技术的迅猛发展,搜索引擎作为信息检索的重要工具,在日常生活及工作中扮演着越来越重要的角色。然而,传统的搜索引擎架构往往存在难以扩展和升级的...
Nutch基本原理分析包括Nutch的基本组成和工作流程。它解释了Nutch如何组成、如何工作以及工作流程的细节。 工作流程分析部分进一步深入讲解了Nutch的各个组成部分,包括爬虫、索引、搜索和分析等。爬虫部分讨论了...
基本原理分析部分详细介绍了Nutch的工作流程,包括爬虫的工作策略和流程、索引的主要过程以及搜索和分析的过程。索引部分特别提到了倒排索引(inverted index)的构建过程,它是搜索引擎中用于快速检索的关键技术之...
在完成Nutch 1.7的搭建后,你可以进一步研究其工作原理,包括爬虫策略、链接分析算法、分词技术等。同时,Nutch与Hadoop结合可以处理大规模的数据抓取和索引,这在大数据领域有着广泛的应用。通过深入学习,你可以...
Nutch是Apache软件基金会开发的一款开源搜索...学习Nutch不仅能够了解搜索引擎的工作原理,还能提升在分布式计算领域的实践能力。这份高清带书签的教程,将是你学习Nutch的最佳伙伴,帮助你在实践中逐步掌握这一技术。
Nutch 的工作流程包括几个主要步骤:种子URL生成、网页抓取、分词、链接分析、索引和搜索。这些步骤可以通过 Hadoop 分布式计算框架进行扩展,以处理大规模的网页数据。 3. **抓取框架**: Nutch 0.9 提供了一个...
2. **理解搜索引擎**:学习Nutch有助于深入理解搜索引擎的工作原理,尤其是大规模分布式系统的运作方式。 3. **扩展性**:Nutch的灵活性允许用户根据需求定制搜索引擎,无论是界面还是功能,都可以通过其插件机制...
Nutch爬虫系统分析 Nutch是一款开源的网络爬虫系统,能够高效地抓取网页内容并将其存储在数据库中。...通过对Nutch的分析,我们可以更好地理解爬虫系统的工作原理,并更好地使用Nutch来满足我们的需求。
本资料包围绕Nutch爬虫,提供了相关的参考书籍和源代码分析,旨在帮助用户深入理解Nutch的工作原理和实践应用。 首先,Nutch爬虫的基础知识包括它的架构和工作流程。Nutch分为多个阶段,包括种子URL的生成、网页...
Nutch 是一个开源的搜索引擎项目,它主要用于抓取和索引网页内容,为用户提供搜索功能。在Nutch的工作流程中,"快照"扮演着重要角色。...记住,理解Nutch的工作原理和数据结构是高效利用它的关键。
标签“源码”意味着这个学习资料可能涉及Nutch的源代码分析,这对于深入理解Nutch的工作原理至关重要。通过阅读源码,学习者可以了解Nutch如何实现URL的发现、页面下载、解析、分词、索引等关键功能。此外,源码分析...
4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 ...
**Nutch 网页爬取总结** **前言** Nutch 是一个开源的网络爬虫项目,由 Apache 基金会维护,主要用于构建大规模的搜索引擎。它提供了从互联网抓取网页、分析链接...同时,Nutch 也是学习网络爬虫原理和技术的好工具。
通过深入剖析Nutch 1.2中的Crawl类,我们不仅了解了Nutch的工作流程和核心组件,还掌握了配置文件的关键作用。Nutch通过精细的模块化设计和灵活的配置机制,实现了高效的数据抓取和处理。对于希望进一步探索搜索引擎...
这个版本的源码包含了实现Web抓取、索引和搜索功能的全部Java代码,为开发者提供了深入理解搜索引擎工作原理的机会。 Nutch的主要组件包括以下几个部分: 1. **Web抓取(Crawling)**:Nutch的抓取模块使用了...
Nutch是一款开源的Java搜索引擎,旨在让用户能够轻松地运行自己的搜索引擎。它是基于Lucene构建的,后者是一个...此外,教程还引导学习者深入到Nutch的内部工作原理和分析方法,为后续的高级应用和定制开发打下基础。