`

理解Nutch的工作流程

阅读更多

在没有学习研究Nutch的源代码之前,我认为还是有必要对Nutch的工作流程有一个感性的认识和了解。通过对Nutch工作流程的学习认识,先有一个整体的印象,然后可以很好地指导我们去阅读学习它的源代码,从而更加深入理解Nutch。

当然,也不是唯一的,在阅读一个框架的源代码的时候,只要你选择了一个好的突破口,然后按照基于深度遍历的特性来学习理解,也能起到一定效果。但是,这种方式有点像是对着一个黑盒进行研究,对一个有机体没有一个整体的把握,也就是说没有整体概念,或者整体概念有点模糊。

Nutch工作流程

先展示一个相当生动的图片,它描述了Nutch的工作流程,如图所示:

 

其实,只要你沿着图中的数字标号的顺序就可以简单地了解一下Nutch的工作流程。这里,涉及到一些比较重要的目录,比如crawldb、index、indexes、linkdb、segments,这些目录是在你使用Nutch抓取程序执行抓取任务的过程中,在文件系统中生成的,在文章http://hi.baidu.com/shirdrn/blog/item/f92312ef58a260e9ce1b3ef9.html中执行命令:

$ sh ./bin/nutch crawl urls -dir mydir -depth 2 -threads 4 -topN 50 >&./logs/mynutchlog.log

之后,可以在mydir目录下面看到上面列举出的5个目录,简单介绍如下:

crawdb,linkdb

是web link目录,存放url 及url的互联关系,作为爬行与重新爬行的依据,页面默认30天过期。

segments

是主目录,存放抓回来的网页。页面内容有bytes[]的raw content 和 parsed text的形式。nutch以广度优先的原则来爬行,因此每爬完一轮会生成一个segment目录。

index

是lucene的索引目录,是indexes目录里所有index合并后的完整索引,注意索引文件只对页面内容进行索引,没有进行存储,因此查询时要去访问segments目录才能获得页面内容。

如果你研究过Lucene,相信index和indexes目录中的文件会非常熟悉的,他们是索引文件,使用不同扩展名的文件来存储不同的内容,比如,.nrm文件是存储标准化因子信息的,.fnm文件是存储文件名字信息的,.prx文件是存储Term的词频信息的,等等。

因为在上面的工作流程图中出现了上面的这些目录,对理解Nutch的工作流程很重要。下面,根据图中的流程将Nutch的工作流程分为两个部分进行综述。

以index为分隔线,因为第一部分,在左侧,是抓取网页并分析处理;第二部分是基于index索引库提供检索功能。

第一部分流程综述:

1.)inject start urls

注入抓取URL。因为Nutch的抓取程序要抓取网页,而定位到某个(或者某些)网页需要指定一个URL,在此基础上,Nutch按照广度遍历策略进行抓取,会根据一开始指定的URL(可以是一个URL集合:URLs),以此为基础进行抓取工作。

2.)generate segment

生成segment。Nutch抓取程序需要抓取到很多的页面,那么具体是哪些页面的?当然,在互联网上是通过URL来定位的。这一步骤主要是对上一步提交的URL集合进行分析,确定抓取任务的详细信息。

fetch list

分析提交的URL集合之后,建立一个抓取任务列表。在以后的抓取工作中就可以根据预处理的此列表进行工作了。

www

这是通过访问万维网(www),实现抓取工作。

3.)fetch content

开始根据前面生成的抓取任务列表中指定的URL对应的页面,这时候开始抓取工作了。

fetched content

需要将抓取到的这些页面文件存放到指定的位置,这些页面文件可以是经过简单预处理以后而被存储到文件系统中,也可以是原生的网页文件,以备后继流程基于这些文件来进一步处理,比如分词,建立索引。

content parser

内容解析器。抓取到的页面文件被提交到这里,实现对页面文件的处理,包括页面文件的分析和处理。

4.)parse content

当然,我们抓取的数据是结构和内容非常复杂的数据,而我们感兴趣的主要是文件的内容,因为基于关键字检索的搜索引擎的实现,都是根据文本内容来实现的。

parsed text & data

通过content parser解析器,最终获取到的就是文本内容和其它一些可能需要用到的数据。有了这些可以识别的文本内容和数据,就可以基于此来建立索引库,而且需要将本次抓取任务的详细信息登录到crawlDB,为下次抓取任务提供有用的信息(比如:避免重复抓取相同的URL指定的页面)。

因此接下来分为两个方向:一个是索引,一个是更新crawlDB并继续执行抓取任务:

indexing

这是一个索引的过程,对分析处理完成并提交的文本及其数据建立索引,通过索引文件就可以实现信息的检索功能了。建立索引过程中,由于是基于Lucene的,所以用到了Analyzer分析器,对预处理的文件进行分析、过滤、分词等等,最后将写入到索引库,供搜索程序工作使用。

update crawlDB with new extracted urls

根据网页分析处理获取到的信息,更新crawlDB(爬行数据库),并根据提取到的抓取任务已经注入的URLs循环执行抓取任务。

第二部分流程综述:

这部分比较简单了,就是启动WEB服务器,为用户提供检索服务。

这里,用户可以直接通过输入检索关键字,使用Lucene对用户检索关键字进行处理调用Nutch的搜索程序,基于索引库中存储的信息,来提取满足用户检索需求的信息。

Nutch工作流程总结

上面的流程已经分析地非常透彻了,参考一些资料做个总结吧。通过下面总结的工作流程,理清思路,很有帮助的,如下所示,Nutch的工作流程描述:

抓取程序工作流程

(1.) 建立初始URL集

(2.) 将URL集注入crawldb数据库---inject

这一步骤,上面的图中没有涉及到。既然需要维护一个crawlDB,那么在任何时候只要与抓取任务有关的而且是有用的信息都会被写入crawlDB的

(3.) 根据crawldb数据库创建抓取列表---generate

(4.) 执行抓取,获取网页信息---fetch

(5.) 更新数据库,把获取到的页面信息存入数据库中---updatedb

(6.) 重复进行3~5的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环

(7.) 根据sengments的内容更新linkdb数据库---invertlinks

(8.) 建立索引---index

搜索程序工作流程

(1.) 用户通过用户接口进行查询操作

(2.) 将用户查询转化为lucene查询

(3.) 从索引库中提取满足用户检索需求的结果集

(4.) 返回结果

参考文章:

1、http://today.java.net/pub/a/today/2006/01/10/introduction-to-nutch-1.html

2、http://www.blogjava.net/calvin/archive/2006/08/09/62507.html

3、Nutch入门学习.pdf

分享到:
评论

相关推荐

    分析Nutch的工作流程

    Nutch的工作流程是一个复杂但高效的过程,它通过一系列精心设计的步骤来完成对互联网内容的抓取、解析和索引。通过上述分析,我们可以看出每个步骤都至关重要,且相互之间紧密关联。从初始URL集合的构建到最终索引的...

    nutch使用&Nutch;入门教程

    入门教程”将带你深入理解Nutch的基本概念、工作流程以及如何实际操作它来执行网络爬取任务。 一、Nutch简介 Nutch是一个基于Java的开源搜索引擎,其主要功能包括网页抓取、链接分析、网页排名和索引。Nutch的设计...

    Nutch爬虫工作流程及文件格式详细分析

    本文将详细分析Nutch爬虫的工作流程和涉及的主要文件格式。 首先,Nutch爬虫(Crawler)的核心任务是抓取互联网上的网页,并构建一个链接结构的数据库,称为WebDB。WebDB包含两类实体:Page和Link。Page实体记录了...

    Nutch 1.2源码阅读

    这些路径的定义对于理解Nutch如何管理数据流至关重要。 - **`crawlDb`**:存储待抓取和已抓取的URL信息,是Nutch抓取策略的基础。 - **`linkDb`**:记录网页间的链接关系,用于计算页面排名(如PageRank算法)。 - ...

    nutch

    学习 Nutch 需要掌握 Hadoop 相关知识,包括配置 Hadoop 环境、理解 MapReduce 工作原理等。Nutch 的配置文件(如 `conf/nutch-site.xml`)需要根据实际需求进行调整,比如设置抓取策略、设置抓取间隔、调整抓取范围...

    分享一个Nutch入门学习的资料

    标签“源码”意味着这个学习资料可能涉及Nutch的源代码分析,这对于深入理解Nutch的工作原理至关重要。通过阅读源码,学习者可以了解Nutch如何实现URL的发现、页面下载、解析、分词、索引等关键功能。此外,源码分析...

    nutch爬虫资料

    本资料包围绕Nutch爬虫,提供了相关的参考书籍和源代码分析,旨在帮助用户深入理解Nutch的工作原理和实践应用。 首先,Nutch爬虫的基础知识包括它的架构和工作流程。Nutch分为多个阶段,包括种子URL的生成、网页...

    nutch入门.pdf

    索引部分分析了索引的主要过程和工作流程,搜索部分则解释了Nutch如何完成搜索功能。 Nutch分析方法和工具部分讨论了Crawldb、Linkdb、Segments和Index等工具的使用方法。 分布式文件系统部分概述了Nutch的文件...

    eclipse配置nutch,eclipse配置nutch

    ### 一、理解Nutch与Eclipse的结合 Nutch是一个基于Hadoop的框架,用于构建可扩展且高性能的网络爬虫。它不仅能够抓取网页,还能进行内容分析、链接分析以及全文搜索。然而,Nutch的安装和配置可能对初学者来说有些...

    nutch开发资料 搜索引擎

    4. **Nutch工作流程**:Nutch的工作流程主要包括URL发现(抓取种子URL并发现新的链接)、页面下载、解析HTML、提取链接、分词、生成索引文档、建立倒排索引以及提供搜索服务。每个步骤都可以根据实际需求进行定制和...

    nutch根据URL来查找快照

    Nutch 是一个开源的搜索引擎项目,它主要用于抓取和索引网页内容,为用户提供搜索功能。在Nutch的工作流程中,"快照"扮演着重要角色。...记住,理解Nutch的工作原理和数据结构是高效利用它的关键。

    nutch2.2.1安装步骤.docx

    Apache Nutch 是一个开源的网络爬虫框架,用于抓取互联网上的网页并建立索引,以便进行全文搜索。...理解这些组件的作用以及它们之间的交互是掌握 Nutch 的关键,这将帮助你在大数据爬取和搜索引擎领域迈开重要的一步。

    Nutch入门教程 高清 带书签

    二、Nutch工作流程 1. **种子URL**:启动Nutch时,需要提供一批起始URL(种子URL),Nutch将从这些URL开始抓取。 2. **抓取**:Nutch使用HTTP协议抓取网页,支持多种抓取策略,如深度优先、广度优先等。 3. **解析**...

    nutch09版本亲测好用

    Nutch 的工作流程包括几个主要步骤:种子URL生成、网页抓取、分词、链接分析、索引和搜索。这些步骤可以通过 Hadoop 分布式计算框架进行扩展,以处理大规模的网页数据。 3. **抓取框架**: Nutch 0.9 提供了一个...

    nutch帮助文档;nutch学习 入门

    - **运行Nutch流程**:执行`bin/nutch crawl`命令,依次进行抓取、解析、索引等步骤。 - **使用Solr或Elasticsearch**:Nutch可以将索引数据导出到Solr或Elasticsearch,以实现更强大的搜索功能。 - **学习源码**...

    nutch入门教程

    2. **理解搜索引擎**:学习Nutch有助于深入理解搜索引擎的工作原理,尤其是大规模分布式系统的运作方式。 3. **扩展性**:Nutch的灵活性允许用户根据需求定制搜索引擎,无论是界面还是功能,都可以通过其插件机制...

    开发基于 Nutch 的集群式搜索引擎

    ### 开发基于Nutch的集群式搜索引擎 #### Nutch背景知识与架构 Nutch是一款开源搜索引擎,使用Java语言编写,并且依赖于Lucene这一高性能全文搜索...这对于理解Nutch的工作原理及其在实际场景中的应用具有重要意义。

    nutch1.2源码

    Apache Nutch是开源的网络爬虫项目,专为大规模数据抓取设计,它与Hadoop分布式计算框架紧密集成,能够处理海量网页...通过深入理解Nutch的架构和工作流程,你可以构建自己的定制化网络爬虫系统,满足特定的业务需求。

    nutch架构图

    Nutch的架构图可以帮助我们理解其工作流程和组件间的交互,这对于学习和入门Nutch至关重要。 首先,让我们从"Injector.png"开始,这个组件是Nutch工作流程的起点。Injector的作用是将初始URL种子注入到CrawlDB...

Global site tag (gtag.js) - Google Analytics