`

Nutch原理

阅读更多

Nutch原理(转载)

Nutch主要分为两个部分:爬虫crawler和查询searcherCrawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。

 

 

 

CrawlerSearcher两部分尽量分开的目的主要是为了使两部分可以分布式配置在硬件平台上,例如将CrawlerSearcher分别放在两个主机上,这样可以提升性能。

 

 

爬虫,Crawler

 

 

 

Crawler的重点在两个方面,Crawler的工作流程和涉及的数据文件的格式和含义。数据文件主要包括三类,分别是web database,一系列的segment加上index,三者的物理文件分别存储在爬行结果目录下的db目录下webdb子文件夹内,segments文件夹和index文件夹。那么三者分别存储的信息是什么呢?

 

 

Web database,也叫WebDB,其中存储的是爬虫所抓取网页之间的链接结构信息,它只在爬虫Crawler工作中使用而和Searcher的工作没有任何关系。WebDB内存储了两种实体的信息:pagelinkPage实体通过描述网络上一个网页的特征信息来表征一个实际的网页,因为网页有很多个需要描述,WebDB中通过网页的URL和网页内容的MD5两种索引方法对这些网页实体进行了索引。Page实体描述的网页特征主要包括网页内的link数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。同样的,Link实体描述的是两个page实体之间的链接关系。WebDB构成了一个所抓取网页的链接结构图,这个图中Page实体是图的结点,而Link实体则代表图的边。

 

 

一次爬行会产生很多个segment,每个segment内存储的是爬虫Crawler在单独一次抓取循环中抓到的网页以及这些网页的索引。Crawler爬行时会根据WebDB中的link关系按照一定的爬行策略生成每次抓取循环所需的fetchlist,然后Fetcher通过fetchlist中的URLs抓取这些网页并索引,然后将其存入segmentSegment是有时限的,当这些网页被Crawler重新抓取后,先前抓取产生的segment就作废了。在存储中。Segment文件夹是以产生时间命名的,方便我们删除作废的segments以节省存储空间。

 

 

IndexCrawler抓取的所有网页的索引,它是通过对所有单个segment中的索引进行合并处理所得的。Nutch利用Lucene技术进行索引,所以Lucene中对索引进行操作的接口对Nutch中的index同样有效。但是需要注意的是,Lucene中的segmentNutch中的不同,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.       循环进行35步直至预先设定的抓取深度。

 

7.       根据WebDB得到的网页评分和links更新segments (updatesegs).

 

8.       对所抓取的网页进行索引(index).

 

9.       在索引中丢弃有重复内容的网页和重复的URLs (dedup).

 

10.   segments中的索引进行合并生成用于检索的最终index(merge).

 

 

 

Crawler详细工作流程是:在创建一个WebDB之后(步骤1), “产生/抓取/更新”循环(步骤36)根据一些种子URLs开始启动。当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤710)。在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。

 

 

其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?原因在于抓取的更新。比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。

 

 

另外这些子操作在第一次进行Crawler运行时可能并不用到,它们主要用于接下来的索引更新,增量搜索等操作的实现。这些在以后的文章中我再详细讲。

 

 

个性化设置:

 

 

 

Nutch中的所有配置文件都放置在总目录下的conf子文件夹中,最基本的配置文件是conf/nutch-default.xml。这个文件中定义了Nutch的所有必要设置以及一些默认值,它是不可以被修改的。如果你想进行个性化设置,你需要在conf/nutch-site.xml进行设置,它会对默认设置进行屏蔽。

 

 

Nutch考虑了其可扩展性,你可以自定义插件plugins来定制自己的服务,一些plugins存放于plugins子文件夹。Nutch的网页解析与索引功能是通过插件形式进行实现的,例如,对HTML文件的解析与索引是通过HTML document parsing pluginparse-html实现的。所以你完全可以自定义各种解析插件然后对配置文件进行修改,然后你就可以抓取并索引各种类型的文件了。

 

 

 

Crawler运行实例分析

 

 

 

下一篇文章里,我将利用Nutch爬虫对一个已知结构和内容的实验网络进行爬行和抓取,对抓取的过程以及结果文件进行内容分析来更进一步地了解Nutch爬虫。

 

分享到:
评论

相关推荐

    提高nutch运行效率的原理与方法

    提高nutch运行效率的原理与方法,nutch的运行过程相对来说还是很慢的,对于一些特殊的应用来说,必须对nutch做很多修改来达到提高速度的目的,本人在这方面有深入研究,可以提高2-5倍性能。

    Nutch搜索引擎·Nutch浅入分析(第5期)

    1.1 Nutch 基本原理 1.1.1 Nutch 基本组成 1.1.2 Nutch 工作流程 1.2 Nutch 流程详解 1.2.1 Nutch 数据流程 1.2.2 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搜索引擎数据获取1、 基本原理2、网络蜘蛛3、局域网抓取

    nutch支持书名号搜索原理解释及代码实现

    nutch支持书名号搜索原理解释及代码实现

    Nutch入门.rar

    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中插件的分析比较透彻,大家可以借鉴一下里面的方法,很不错的

    Lucenechapter11.rar_nutch

    nutch的小应用 ,看看应该对学习检索系统原理很有帮助

    Nutch公开课从搜索引擎到网络爬虫

    Nutch公开课从搜索引擎到网络爬虫:本书介绍了网络爬虫开发中的关键问题与java实现。主要包括从互联网获取信息与提取信息和对web信息挖掘等内容。本书在介绍基本原理的同时注重辅以具体代码实现来帮助读者加深理解,...

    Hadoop原理——让你快速理解掌握Hadoop

     始于2002年的apache项目Nutch  2003年Google发表了关于GFS的论文  2004年Nutch的开发者开发了NDFS  2004年Google发表了关于MapReduce的论文  2005年MapR被引入了NDFS  2006年改名为Hadoop,NDFS的创始...

    网页爬虫算法原理与实现方法

    用于描述采用apache开源的solr进行网页抓取的方法与实现步骤。

    【信息检索课程设计】sdu新闻网站全站爬取+索引构建+搜索引擎

    以下是检索的基本要求:可以利用lucene、nutch等开源工具,利用Python、Java等编程语言,但需要分别演示并说明原理。 Web网页信息抽取 以山东大学新闻网为起点进行网页的循环爬取,保持爬虫在view.sdu.edu.cn之内...

    论文研究-漏洞垂直搜索引擎的设计与实现 .pdf

    漏洞垂直搜索引擎的设计与实现,刘凤灵,,本文介绍了搜索引擎原理、PageRank算法、垂直搜索引擎原理以及开源搜索引擎Nutch,针对目前漏洞库信息庞大、漏洞信息不全面、漏洞描��

    网络爬虫调研报告.doc

    二者均为Java开源框架,Heritrix 是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都称作网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这些资源抓取到本地, 使用的...

    网络爬虫调研报告(1).doc

    二者均为Java开源框架,Heritrix 是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都称作网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这些资源抓取到本地, 使用的...

    网络爬虫调研报告(2).doc

    二者均为Java开源框架,Heritrix 是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都称作网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这些资源抓取到本地, 使用的...

    用python + hadoop streaming 分布式编程(一) — 原理介绍,样例程序与本地调试

    Doug Cutting和Mike Cafarella在开发搜索引擎Nutch时对这两篇论文做了自己的实现,即同名的MapReduce和HDFS,合起来就是Hadoop。 MapReduce的Data flow如下图,原始数据经过mapper处理,再进行partition和sort,...

    IKAnalyzer源码

    ikanalyzer源码,解析ikanalyzer的实现过程,了解ikanalyzer的原理

    网站架构技术

    nutch 分词器 no-sql库 mongodb hadoop 业务拆分 web service restful 分布式服务 大型网站架构演化的价值观 核心价值:随网站所需灵活应对 驱动力量:网站的业务发展 网站架构...

Global site tag (gtag.js) - Google Analytics