Nutch学习记录:Nutch总体架构

#Nutch学习记录:Nutch总体架构

一、Nutch基本处理流程

Nutch 总体上采用了流式处理过程,其基本处理流程如图 1.1 所示:


Nutch基本处理流程:

  1. Injector:首先,将链接文件中的链接种子(一般位于 HDFS 中)注入到 CrawlDb。
  2. Generator:接着从 CrawlDb 中挑选链接,创建待抓取列表 crawl_generate。
  3. Fetcher:然后对待抓取列表中的链接进行抓取,并保存抓取内容 content 和结果 crawl_fetch。
  4. Parse:对抓取内容 content 进行解析,得到解析结果 crawl_parse、解析元数据 parse_data 和解析文本 parse_text。
  5. CrawDb:利用解析结果 crawl_parse 和抓取信息 crawl_fetch 更新 CrawlDb。
  6. LinkeDb:根据页面的出链信息 parse_data 倒排形成每个链接的入链信息,从而创建
    LinkDb。
  7. 对 CrawlDb 进行去重处理,即, 将页面签名相同应该在索引中忽略的链接标记为重复。重复的链接在构建索引时会被删除。
  8. Indexer:综合前面内容 CrawlDb、LinkDb、parse_text、parse_data、crawl_parse 和crawl_fetch 创建倒排索引 index。
  9. 最后,基于索引 index 进行查询处理。将查询结果返回给用户。

二、存储结构

Nutch 中所有数据都存储在分布式文件系统 HDFS 中。
以下假设抓取根目录为/web,所有数据存放在该目录下。典型的 Nutch 存储结构包括 链接数据库 CrawlDb,段信息,链接数据库 LinkDb,索引 index 四个部分。

1、链接数据库 CrawlDb

格式为 MapFile<Text, CrawlDatum>,维护有系统中所 有链接(已抓取、未抓取、签名等)的信息,键为链接字符串。CrawlDb 所在目录 一般为/web/crawldb。注:MapFile 是 Hadoop 映射文件,由多条映射记录组成, 每个映射记录由一对<键,值>组成,所有映射记录按照键有序排列,因此, MapFile 可以给定一个键,随机访问具有该键的映射记录。

2、段信息

段信息所在目录一般为/web/segments,目录下可以有多个段存在。每个段对应一 个抓取处理。段的名字以段生成时间(抓取列表生成时创建)表示,如 20121116090616(以下将以该段为名字介绍其他数据所在目录)。每个段下包括 以下数据:

  1. 抓取列表 crawl_generate:格式为 SequenceFile<Text, CrawlDatum>,键为链接字符串,存放所有待抓取的链接,也是抓取应用的输入。所在目录 为/web/segments/20121116090616/crawl_generate。注:SequenceFile 是 Hadoop 序 列文件,由多条序列记录组成,每个序列记录由一对 <键,值>组成,不同于 MapFile,记录没有按照键排序,因此对 SequenceFile 只能顺序访问,不能随机 定位。
  2. 网页内容 contnet:格式为 MapFile<Text,Content>,键为链接字符串,存 放所有成功抓取网页的内容。所在目录为/web/segments/20121116090616/contnet。
  3. 链接抓取信息 crawl_fetch:格式为 MapFile<Text,CrawlDatum>,键为链 接字符串,存放抓取链接的状态信息和重定向链接(抓取阶段不允许自动重定 向时)。所在目录为/web/segments/20121116090616/crawl_fetch。
  4. 抓取解析信息 crawl_parse:格式为 MapFile<Text,CrawlDatum>,键为链 接字符串。存在抓取文档的解析链接信息,包括各种状态的 CrawlDatum,详细 内容参考解析章节。所在目录为/web/segments/20121116090616/crawl_parse。
  5. 解析数据信息 pare_data:格式为 MapFile<Text,ParseData>,键为链接字 符串,存放解析的文档标题、解析元数据和内容元数据、解析状态、出链列表等。 所在目录为/web/segments/20121116090616/pare_data。
  6. 解析文本信息 pare_text:格式为 MapFile<Text,ParseText>,键为链接字 符串,存放文档抽取的文本。所在目录 为/web/segments/20121116090616/pare_text。

3、链接数据库 LinkDb

格式为 MapFile<Text, InLinks>,键为链接字符串,维护有系统中所有链接的入链信息。LinkDb 所在目录一般为/web/linkdb。

4、索引 index

未合并索引所在目录一般为/web/indexes,合并索引所在目录 为/web/index。具体索引格式为 Lucene 文件格式。在 1.9 中,索引使用 SOLR 等工 具维护,因此,索引一般单独存放在其他工具确定的位置。

以上所有文件都以二进制形式保存,为了方便调试和诊断,Nutch 提供了工具 能够对以上除索引 index 外所有内容进行转储 dump,转换成文本文件。
简单的说,CrawlDb 通过类 CrawlDbReader,LinkDb 通过类 LinkDbReader,段 信息通过类 SegmentReader 进行转储和访问。

索引 index 可以通过开源工具 Luka 进行调试访问。