本文主要源于http://www.ibm.com/developerworks/cn/opensource/os-cn-nutchintro/

基本信息

  Nutch是一个开放源代码(open-source)的Java搜索引擎包,它提供了构建一个搜索引擎所需要的全部工具和功能。使用Nutch不仅可以建立自己内部网的搜索引擎,同时也可以针对整个网络建立搜索引擎。除了基本的功能之外,Nutch也还有不少自己的特色,如Map-Reduce、Hadoop、Plugin等。

  Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。

  nutch是开放源代码的,因此任何人都可以查看他的排序算法是如何工作的。商业的搜索引擎排序算法都是保密的,我们无法知道为什么搜索出来的排序结果是如何算出来的。更进一步,一些搜索引擎允许竞价排名,比如百度,这样的索引结果并不是和站点内容相关的。因此 nutch 对学术搜索和政府类站点的搜索来说,是个好选择,因为一个公平的排序结果是非常重要的。

  学习搜索引擎Nutch,了解一个大型分布式的搜索引擎如何工作是一件让人很受益的事情。在写Nutch的过程中,从学院派和工业派借鉴了很多知识:比如,Nutch的核心部分目前已经被重新用 Map Reduce 实现了。Map Reduce 是一个分布式的处理模型,最先是从 Google 实验室提出来的。并且 Nutch 也吸引了很多研究者,他们非常乐于尝试新的搜索算法,因为对Nutch 来说,这是非常容易实现扩展的。

   Nutch 是非常灵活的:他可以被很好的客户订制并集成到你的应用程序中,使用Nutch 的插件机制,Nutch 可以作为一个搜索不同信息载体的搜索平台。当然,最简单的就是集成Nutch到你的站点,为你的用户提供搜索服务

nutch的目标 
nutch致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, nutch必须能够做到:

  1. 每个月取几十亿网页
  2. 为这些网页维护一个索引
  3. 对索引文件进行每秒上千次的搜索
  4. 提供高质量的搜索结果
  5. 以最小的成本运作

nutch和luene

  1. Lucene 不是完整的应用程序,而是一个用于实现全文检索的软件库。
  2. Nutch 是一个应用程序,可以以 Lucene 为基础实现搜索引擎应用。

  Lucene为 Nutch 提供了文本索引和搜索的API。一个常见的问题是;我应该使用Lucene还是Nutch?最简单的回答是:如果你不需要抓取数据的话,应该使用Lucene。常见的应用场合是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据并用Lucene API建立索引。

Nutch的总体结构

Nutch从总体上看来,分为三个主要的部分:爬行、索引和搜索,各部分之间的关系如图1所示。Web db是Nutch初始运行的URL集合;Fetcher是用来抓取网页的爬行器,也就是平时常说的Crawler;indexer是用来建立索引的部分,它将会生成的索引文件并存放在系统之中;searcher是查询器,用来完成对某一词条的搜索并返回结果。

Nutch 的运行流程

在了解了 Nutch 的总体结构之后,再详细的看看 Nutch 具体是如何运行的?Nutch 的运行流程如图2所示。

  1. 1. 将起始 URL 集合注入到 Nutch 系统之中。
  2. 2. 生成片段文件,其中包含了将要抓取的 URL 地址。
  3. 3. 根据URL地址在互联网上抓取相应的内容。
  4. 4. 解析所抓取到的网页,并分析其中的文本和数据。
  5. 5. 根据新抓取的网页中的URL集合来更新起始URL集合,并再次进行抓取。
  6. 6. 同时,对抓取到的网页内容建立索引,生成索引文件存放在系统之中。

从用户端来看,Nutch 提供了一个基于 Tomcat 的应用程序,它允许用户输入词条,然后 Nutch 会在已经建立好的索引文件中进行搜索,并将相应的结果返回给用户。

nutch基本原理分析

1 nutch的基本组成

  nutch作为一个搜索引擎,其基本组成也同其他搜索引擎一样。简单的说,包括爬虫,索引和搜索三部分。

2 nutch工作流程

在前面的nutch初体验中,我们就是按照nutch的工作流程来进行的,现在总结如下:

  1. 1) 建立初始URL
  2. 2) URL集注入crawldb数据库---inject
  3. 3) 根据crawldb数据库创建抓取列表---generate
  4. 4) 执行抓取,获取网页信息---fetch
  5. 5) 更新数据库,把获取到的页面信息存入数据库中---updatedb
  6. 6) 重复进行35的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环
  7. 7) 根据sengments的内容更新linkdb数据库---invertlinks
  8. 8) 建立索引---index
  9. 9) 用户通过用户接口进行查询操作
    10) 将用户查询转化为lucene查询
    11) 返回结果
  10. 其中,1~6属于爬虫部分;78属于索引部分;9~11属于查询部分。 (注: 进行内部网爬行时执行的crawl操作,实质上也是执行的以上一系列操作,这一点从它的抓取日志上可以看出)

nutch工作流程分析

爬虫-工作策略

其工作策略一般则可以分为累积式抓取(cumulative crawling)增量式抓取(incremental crawling)两种。

  累积式抓取是指从某一个时间点开始,通过遍历的方式抓取系统所能允许存储和处理的所有网页。在理想的软硬件环境下,经过足够的运行时间,累积式抓取的策略可以保证抓取到相当规模的网页集合。但由于Web数据的动态特性,集合中网页的被抓取时间点是不同的,页面被更新的情况也不同,因此累积式抓取到的网页集合事实上并无法与真实环境中的网络数据保持一致。

  与累积式抓取不同,增量式抓取是指在具有一定量规模的网络页面集合的基础上,采用更新数据的方式选取已有集合中的过时网页进行抓取,以保证所抓取到的数据与真实网络数据足够接近。进行增量式抓取的前提是,系统已经抓取了足够数量的网络页面,并具有这些页面被抓取的时间信息。 
  面向实际应用环境的网络蜘蛛设计中,通常既包括累积式抓取,也包括增量式抓取的策略。累积式抓取一般用于数据集合的整体建立或大规模更新阶段;而增量式抓取则主要针对数据集合的日常维护与即时更新。 
在确定了抓取策略之后,如何从充分利用网络带宽,合理确定网页数据更新的时间点就成了网络蜘蛛运行策略中的核心问题。

工作流程分析

1.建立初始URL集

初始URL集的建立有两种方式:超链接和站长提交

  1.   超链接:机器人程序根据网页链到其他网页中的超链接,就像日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始.连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超连结,机器人便可以遍历绝大部分网页。
  2.   站长提交:在实际运行中,爬虫不可能抓取到所有站点,为此,网站站长可以向搜索引擎进行提交,要求收录,搜索引擎经过核查之后,便将该网站加入到URL集合中,进行抓取。

2.inject

  1. inject操作调用的是nutch的核心包之一crawl包中的类injector
  2. inject操作主要作用 URL集合进行格式化和过滤,消除其中的非法URL,并设定URL状态(UNFETCHED),按照一定方法进行初始化分值;将URL进行合并,消除重复的URL入口; URL及其状态、分值存入crawldb数据库,与原数据库中重复的则删除旧的,更换新的。
  3. inject操作结果:crawldb数据库内容得到更新,包括URL及其状态。

3.generate

  1. generate操作调用的是crawl包中的类generator
    generate操作主要作用 crawldb数据库中将URL取出并进行过滤对URL进行排序,通过域名、链接数和一种hash算法综合进行降
  2. 序排列\将排列列表写入segment

4.fetch

  1. fetch操作调用的是fetcher包中的类fercher
  2. fetch操作主要作用  执行抓取,按照segment文件夹下的抓取列表进行抓取过程中,页面的URL地址可能因为链接发生改变,从而需要更新URL地址抓取采用多线程方式进行,以提高抓取速度 fetch操作过程中调用了parse操作
  3. fetch操作结果:将页面内容抓取下来,存于segment目录下

5.parse

  1. parse操作调用的是parse包中的类parsesegment
  2. parse操作主要作用
  3. 解析segment中由fetch得到的页面,并进行整理,将页面分成为
  4. parse-dateparse-text
  5. parse-date中保存的是页面的题名、作者、日期、链接等内容
  6. parse-text中保存的是页面的文本内容
  7. parse操作结果:将fetch得到的页面解析为textdata,存于segment
  8. 目录下

6.updatedb

  1. updatedb操作调用的是crawl包中的类crawldb
  2. updatedb操作主要作用
  3. 根据segment目录下fetch文件夹和parse文件夹中的内容,对crawldb
  4. 进行更新,增加新的URL,更换旧的URL
  5. updatedb操作结果:更新了crawldb数据库,为下一轮抓取做准备

nutch-介绍的更多相关文章

  1. 开源爬虫Labin,Nutch,Neritrix介绍和对比

    crawler 开发 语言 功能 单一 支持分布式 爬取 效率 镜像 保存 Nutch Java × √ 低 × Larbin C++ √ × 高 √ Heritrix Java √ × 中 √ ** ...

  2. Nutch搜索引擎(第1期)_ Nutch简介及安装

    1.Nutch简介 Nutch是一个由Java实现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其进行分析,建立索引,以提供相应的接口来对其网页数据进行查询的一 ...

  3. 《图解Spark:核心技术与案例实战》介绍及书附资源

    本书中所使用到的测试数据.代码和安装包放在百度盘提供 下载 ,地址为https://pan.baidu.com/s/1o8ydtKA 密码:imaa 另外在百度盘提供本书附录  下载 ,地址为http ...

  4. Nutch源码阅读进程1---inject

    最近在Ubuntu下配置好了nutch和solr的环境,也用nutch爬取了一些网页,通过solr界面呈现,也过了一把自己建立小搜索引擎的瘾,现在该静下心来好好看看nutch的源码了,先从Inject ...

  5. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  6. Nutch搜索引擎(第2期)_ Solr简介及安装

    1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...

  7. Nutch搜索引擎(第4期)_ Eclipse开发配置

    1.环境准备 1.1 本期引言 前三期分别介绍了Nutch与Solr在Linux上面的安装,并做了简单的应用,这一期从开发的角度进行,因为我们日常最熟悉的开发环境是Windows,所以本期详细介绍Wi ...

  8. Hadoop发行版本介绍

    前言 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Hadoop靠拢.Hadoop也从小众的高富帅领域 ...

  9. J2EE开发之常用开源项目介绍

    主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库 1持久层: 1)Hibe ...

  10. 全文索引之nutch与hadoop(转)

    原文:http://blog.csdn.net/chaofanwei/article/details/39476535 全文索引-lucene,solr,nutch,hadoop之lucene 全文索 ...

随机推荐

  1. AC日记——输出亲朋字符串 openjudge 1.7 05

    05:输出亲朋字符串 总时间限制:  1000ms 内存限制:  65536kB 描述 编写程序,求给定字符串s的亲朋字符串s1. 亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二 ...

  2. vijos1037搭建双塔(一维背包问题)

    描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔. Mr. F有N块水晶,每块 ...

  3. SQLite 增、删、改、查

    1.iOS中实现SQLite的增.删.改.查  http://www.jianshu.com/p/0b9b78e704a4. 2.用数据库实现收藏功能 http://www.jianshu.com/p ...

  4. 利用统计学知识为android应用的启动时间做数据分析

    [声明:如需转载本文,请注明来源] 一.数据说明 启动时间用同一台设备,同一个包进行启动时间的测试,其中三组样本数据(每组100份对比数据)如下: 设备pro-5-1 base_list_1 = [0 ...

  5. 关于codeMirror插件使用的一个坑

    codeMirror插件可以做语法高亮渲染,但它操作过程是这样的:先从 textarea中读取值放到codemirror动态生成的div中,根据textarea中的换行个数确定行数,根据正则表达来高亮 ...

  6. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  7. 常用正则表达式大全!(例如:匹配中文、匹配html)

    一.常见正则表达式 匹配中文字符的正则表达式: [u4e00-u9fa5]    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了  匹配双字节字符(包括汉字在内):[^x00-xff]  评注 ...

  8. SQL2012删除作业失败的处理

    修改msdb数据库中的过程sp_delete_job,如下: USE [msdb] GO /****** Object: StoredProcedure [dbo].[sp_delete_job] S ...

  9. noi1696 逆波兰表达式

    1696:逆波兰表达式 http://noi.openjudge.cn/ch0303/1696/ 总时间限制:  1000ms 内存限制:  65536kB 描述 逆波兰表达式是一种把运算符前置的算术 ...

  10. python install

    Install all dependencies by pip install -r requirements.txt (Run this command from project root)