`

nutch的核心流程分析

阅读更多


    Crawl类的时序图。

    流程如下:

1. 建立初始URL

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

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

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

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


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

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

8. 建立索引---index

一、 org.apache.nutch.crawl.Injector:
    1,注入url.txt
    2,url标准化
    3,拦截url,进行正则校验(regex-urlfilter.txt)
    4,对符URL标准的url进行map对构造<url, CrawlDatum>,在构造过程中给CrawlDatum初始化得分,分数可影响url host的搜索排序,和采集优先级!
    5,reduce只做一件事,判断url是不是在crawldb中已经存在,如果存在则直接读取原来CrawlDatum,如果是新host,则把相应状态存储到里边(STATUS_DB_UNFETCHED(状态意思为没有采集过))

二、org.apache.nutch.crawl.Generator:
    1,过滤不及格url (使用url过滤插件)
    2,检测URL是否在有效更新时间里
    3,获取URL metaData,metaData记录了url上次更新时间
    4,对url进行打分
    5,将url载入相应任务组(以host为分组)
    6,计算url hash值
    7,收集url, 直至到达 topN 指定量

三、 org.apache.nutch.crawl.Fetcher:
    1,从segment中读取<url, CrawlDatum>,将它放入相应的队列中,队列以queueId为分类,而queueId是由 协议://ip 组成,在放入队列过程中,
        如果不存在队列则创建(比如javaeye的所有地址都属于这个队列:http://221.130.184.141)  --> queues.addFetchItem(url, datum);
    2,检查机器人协议是否允许该url被爬行(robots.txt) --> protocol.getRobotRules(fit.url, fit.datum);
    3,检查url是否在有效的更新时间里 --> if (rules.getCrawlDelay() > 0)
    4,针对不同协议采用不同的协议采用不同机器人,可以是http、ftp、file,这地方已经将内容保存下来(Content)。 --> protocol.getProtocolOutput(fit.url, fit.datum);
    5,成功取回Content后,在次对HTTP状态进行识别(如200、404)。--> case ProtocolStatus.SUCCESS:
    6,内容成功保存,进入ProtocolStatus.SUCCESS区域,在这区域里,系统对输出内容进行构造。 --> output(fit.url, fit.datum, content, status, CrawlDatum.STATUS_FETCH_SUCCESS);
    7,在内容构造过程中,调取内容解析器插件(parseUtil),如mp3\html\pdf\word\zip\jsp\swf……。 --> this.parseUtil.parse(content); --> parsers[i].getParse(content);
    8,我们现在研究html解析,所以只简略说明HtmlParser,HtmlParser中,会解析出text,title, outlinks, metadata。 
        text:过滤所有HTML元素;title:网页标题;outlinks:url下的所有链接;metadata:这东西分别做那么几件事情 首先检测url头部的meta name="robots" 看看是否允许蜘蛛爬行,
        其次通过对meta http-equiv refresh等属性进行识别记录,看页面是否需要转向。

四、 org.apache.nutch.parse.ParseSegment:
    1,这个类逻辑就相对简单很多了哦,它对我们也是很有价值的,它只做一件事情,就是对爬行下来的Content(原始HTML)进行解析,具体解析通过插件来实现。
        比如我们要做的数据分析、数据统计都可以在这进行实现。
    2,执行完成后,输出三个Map对<url,ParseText>解析内容、<url,ParseData>包含所有链接的分析后的结果 、<url,CrawlDatum>outlinks

五、org.apache.nutch.crawl.CrawlDb:
    主要根据crawld_fatch输出更新crawldb。
    1,map对crawld_fatch、crawldb地址进行标准化(nomalizer)和拦截操作(filte);
    2,reduce在对两crawld_fatch和crawldb进行合并更新。

六、org.apache.nutch.crawl.LinkDb:
    这个类的作用是管理新转化进来的链接映射,并列出每个url的外部链接(incoming links)。
    1,先是对每一个url取出它的outLinks,作map操作把这个url作为每个outLinks的incoming link,
    2,在reduce里把根据每个key来把一个url的所有incoming link都加到inlinks里。
    3,这样就把每个url的外部链接统计出来了,注意,系统对只对外部链接进行统计,什么叫外部链接呢,就是只对不同host进行统计,
        记住iteye.com和biaowen.iteye.com是两个不同的host哦。 --> boolean ignoreInternalLinks = true;
    4,然后一步是对这些新加进来的链接进行合并。

七、 org.apache.nutch.crawl.Indexer:
    这个类的任务是另一方面的工作了,它是基于hadoop和lucene的分布式索引。它就是为前面爬虫抓取回来的数据进行索引好让用户可以搜索到这些数据。
    这里的输入就比较多了,有segments下的fetch_dir,parseData和parseText,还有crawldb下的 current_dir和linkdb下的current_dir。
    1,在这个类里,map将所有输入都装载到一个容器里边,
    2,再到reduce进行分类处理,
    3,实现拦截 --> this.filters.filter(doc, parse, key, fetchDatum, inlinks);
    4,打分 --> this.scfilters.indexerScore(key, doc, dbDatum,fetchDatum, parse, inlinks, boost);
    5,当然要把这些数据体组合成一个 lucene的document让它索引了。
    6,在reduce里组装好后收集时是<url,doc>,最后在输出的OutputFormat类里进行真正的索引。
        doc里有如下几个field
            content(正文)
            site    (所属主地址
            title    (标题)
            host    (host)
            segement    (属于哪个segement)
            digest    (MD5码,去重时候用到)
            tstamp    (时间戳)
            url    (当前URL地址)
            载了一个例子:
                doc =
                    {content=[biaowen - JavaEye技术网站 首页 新闻 论坛 博客 招聘 更多 ▼ 问答 ………………(内容省略)………… biaowen 永NF/ICP备05023328号],
                    site=[biaowen.iteye.com],
                    title=[biaowen - JavaEye技术网站],
                    host=[biaowen.iteye.com],
                    segment=[20090725083125],
                    digest=[063ba8430fa84e614ce71276e176f4ce],
                    tstamp=[20090725003318265],
                    url=[http://biaowen.iteye.com/]}

八、 org.apache.nutch.crawl.DeleteDuplicates:
    这个类的作用就是这它的名字所写的意思--去重。
    前面索引后(当然不是一次时的情况)会有重复,所以要去重。为什么呢,在一次索引时是不重复的,可是多次抓取后就会有重复了。
    就是这个原因才要去重。当然去重的规则有两种一个是以时间为标准,一种是以内容的md5值为标准。

九、org.apache.nutch.indexer.IndexMerger:
    这个类就相对简单了,目的将多个indexes合并为一个index,直接调用lucene方法实现!


附带些参考资料:目录结构,参考自《Lucene+Nutch搜索引擎开发》
    一、crawldb    下载的url,以及下载日期,用来进行页面更新
    二、segements    存放抓取页面和分析结果
                        1、crawl_generate:待下载url
                        2、crawl_fetch:每个下载url的状态
                        3、content:每个下载页面的内容
                        4、parse_text:包含每个解析过的url文本内容
                        5、parse_data:每个url解析出的外部链接和元数据
                        6、crawl_parse:用来更新crawl的外部链接库
    三、linkdb    存放url的互联关系
    四、indexes:存放每次下载的独立索引目录
    五、index:符合lucene格式的索引目录,是indexes里所有index合并后的完整索引

 

 

来源:http://dev.firnow.com/course/3_program/java/javajs/20100719/459450.html

  • 大小: 14.3 KB
分享到:
评论

相关推荐

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

    本文主要分析Nutch爬虫的工作流程及其涉及的文件格式。 Nutch的爬虫部分主要负责从互联网上抓取网页并构建索引。这一过程可以分为几个关键步骤: 1. **生成Fetchlist**: - Nutch首先基于现有的Web数据库(WebDB...

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

    但在后续版本中,为了提高效率和功能,Nutch将索引的建立以及搜索交由Solr实现,从而形成了以Nutch为核心抓取和分析网页,以Solr为核心建立索引和提供搜索的分工合作模式。 具体的工作流程可以概括为以下步骤: 1....

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

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

    nutch09版本亲测好用

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

    Nutch入门教程 高清 带书签

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

    nutch入门教程

    Nutch工作流程分析 **5.1 爬虫** 爬虫是Nutch的重要组成部分,负责从互联网上抓取网页。其工作流程包括:确定抓取策略,如深度优先或广度优先;执行抓取任务,获取HTML内容;以及解析HTML,提取出链接和其他元...

    nutch入门.pdf

    工作流程分析部分进一步深入讲解了Nutch的各个组成部分,包括爬虫、索引、搜索和分析等。爬虫部分讨论了Nutch的工作策略和流程,包括其倒排索引(inverted index)的使用。索引部分分析了索引的主要过程和工作流程,...

    nutch 搜索模块流程.doc

    整个流程的核心在于 Nutch 如何解析查询,建立查询对象,然后执行搜索。Nutch 使用倒排索引(Inverted Index)进行快速匹配,索引中的每个关键词对应一组包含该关键词的文档位置。搜索时,Nutch 将查询关键词映射到...

    Nutch入门教程.pdf

    基本原理分析部分详细介绍了Nutch的工作流程,包括爬虫的工作策略和流程、索引的主要过程以及搜索和分析的过程。索引部分特别提到了倒排索引(inverted index)的构建过程,它是搜索引擎中用于快速检索的关键技术之...

    分布式搜索引擎nutch开发

    Nutch的核心架构分为四个主要部分:Crawling(爬虫)、Parsing(解析)、Indexing(索引)和Searching(搜索)。整个过程大致如下: - **Crawling**:Nutch使用URL种子开始,通过HTTP协议抓取网页内容。 - **...

    nutch1.2 java project

    以下是 Nutch 1.2 项目中的一些核心知识点: 1. **环境配置**:在使用 Nutch 之前,你需要确保你的系统安装了 Java 开发环境(JDK),并且设置了 JAVA_HOME 环境变量。同时,你也需要配置 Hadoop 环境,因为 Nutch ...

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

    4. **源码分析**:理解Nutch的核心类和模块,如Fetcher、Parser、Indexer等,以及如何通过源码进行扩展和定制。 5. **工具使用**:如何使用Nutch的命令行工具进行数据操作,以及与其他搜索引擎的集成方法。 6. **...

    nutch爬虫资料

    Nutch的很多核心功能都是基于Java的并发和网络编程实现的,所以掌握这些技能对于深入学习Nutch至关重要。 此外,Nutch与Hadoop的结合是其强大之处。了解Hadoop的MapReduce模型、HDFS文件系统以及YARN资源调度器,能...

    nutch2.2.1-src

    1. **Nutch框架**:Nutch的核心框架提供了爬虫的基本架构,包括种子URL的管理、网页抓取、分词、链接分析等。框架设计灵活,支持插件机制,方便开发者根据需求定制。 2. **Fetcher模块**:负责从Web上下载网页。它...

    nutch-1.5.1源码

    通过分析和学习Nutch-1.5.1源码,开发者不仅可以掌握搜索引擎的核心技术,还能进一步提升在大数据处理、分布式系统和Java编程方面的专业能力。这对于从事相关领域工作或是研究搜索引擎优化(SEO)、信息检索和推荐...

    Nutch简要文档

    Nutch 的核心流程主要包括以下几个步骤: 1. **Inject**:这是 Nutch 的起始阶段,通过 `Injector` 命令将用户提供的 URL 目录(url_dir)中的链接注入到 `crawldb`,这个数据库存储了待抓取的URL。 2. **...

    nutch1.2源码

    Nutch的核心组件包括爬虫、分割器、解析器、索引器和搜索器,这些组件都基于Hadoop进行分布式处理,可以处理大量数据。 二、Nutch与Hadoop的结合 Hadoop是一个开源的分布式计算框架,它允许在廉价硬件上处理和存储...

    nutch初体验

    在这个初体验中,我们将深入探讨Nutch的核心功能、工作原理以及如何入门学习。 **一、Nutch简介** Nutch是Apache软件基金会的一个项目,由Doug Cutting等人发起。它的目标是提供一个可扩展的、高性能的搜索引擎,...

    apache-nutch的源码

    Nutch 源码的分析和理解对于想要深入研究搜索引擎工作原理、网页抓取技术和大数据处理的开发者来说至关重要。 在`apache-nutch-2.2.1`这个压缩包中,你将找到以下关键组成部分: 1. **源代码结构**:Nutch 的源...

Global site tag (gtag.js) - Google Analytics