`
wbj0110
  • 浏览: 1603228 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Nutch 实战

阅读更多

基本信息

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

 

Nutch的总体结构

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

图 1. Nutch 总体结构

Nutch 总体结构

 

Nutch 的运行流程

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

1. 将起始 URL 集合注入到 Nutch 系统之中。

2. 生成片段文件,其中包含了将要抓取的 URL 地址。

3. 根据URL地址在互联网上抓取相应的内容。

4. 解析所抓取到的网页,并分析其中的文本和数据。

5. 根据新抓取的网页中的URL集合来更新起始URL集合,并再次进行抓取。

6. 同时,对抓取到的网页内容建立索引,生成索引文件存放在系统之中。

图 2. Nutch 的运行流程

Nutch 的运行流程

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

 

Nutch 的配置和运行

Nutch 既可以在 Linux 下运行,可以在 Windows 下运行,同时还可以在 Eclipse 环境中运行。在本部分中,主要介绍如何在 Eclipse 环境下运行 Nutch。

下载 Nuch 软件包

首先,应该在 Nutch 的下载页面中下载相应的Nutch软件包,现在最新的版本号是0.9, 通常使用的版本号是 0.8.1。

解压缩

下载后得到的是一个名为 nutch-0.9.tar.gz 的压缩包,使用7-Zip可以将其解压缩,解压后得到的文件结构如图3所示。

图 3. Nutch 的目录结构

Nutch 的目录结构

在bin文件夹下存放的是用于命令行运行的文件;Nutch的配置文件都放在了conf下,lib是一些运行所需要的jar文件;plugins下存放的相应的插件;在src文件夹中的是Nutch的所有源文件;webapps文件夹中存放的是web运行相关文件;nutch-0.9.war是Nutch所提供的基于Tomcat的应用程序包。

导入源代码

在获得Nutch的源代码之中,就可以将其导入到Eclipse环境中,并生成一个新的java工程。导入后的代码结构如图4所示。在导入过程中应该注意的是,需要把lib下的所有jar文件以及conf文件夹都添加到工程的build path之中。

另外,Nutch还需要另外两个jar文件,jid3lib-0.5.1.jar和rtf-parser.jar,请分到到下面两个链接下载。

http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib/

http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib/

图 4. Nutch 的包结构

Nutch 的包结构

配置

在正式开始运行Nutch之前,还需要做一些必要的配置,不然在运行时会出错,无法按照要求抓取到相应的页面。

第一个需要修改的文件是 nutch-default.xml, 需要将 HTTP properties 部分的 http.agent.name 赋予一个有意思的字符串;还需要将 plugin properties 部分的 plugin.folders 按照具体的情况做必要修改。清单 1 和清单 2 分别是本文中的 Demo 运行时的具体配置情况,供大家参考。

清单1.
<!-- HTTP properties -->
  <name>http.agent.name</name>
  <value>testNutch</value>
  <description>Just for Testing
  </description>
</property>
清单2.
<!-- plugin properties -->
<property>
  <name>plugin.folders</name>
  <value>plugin</value>
  <description>Directories where nutch plugins are located.  Each
  element may be a relative or absolute path.  If absolute, it is used
  as is.  If relative, it is searched for on the classpath.</description>
</property>

其次,需要修改的文件是crawl-urlfilter.txt, 将其中的MY.DOMAIN.NAME部分按照实际的域名进行修改。清单3中的配置是对*.ibm.com/域进行抓取。

清单3.
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*ibm.com/

另外,还需要的一个操作是在conf文件夹下,建立一个名为prefix-urlfilter.txt的文本文件,其中的内容很简单,如清单4所示。

清单4.
# prefix-urlfilter.txt file starts here
http
# prefix-urlfilter.txt file ends here

抓取

在配置完成之后,就可以开始运行Nutch的Crawler了,不过,正如本文前面所述,开始运行前还需要设定初始URL集合。具体的方法是建立一个文件夹(本文建立的文件夹名为url),并在其中建立一个纯文本文件(本文建立的文件名为urls.txt),文件文件中存放了需要抓取的其实URL地址,如“http://www.ibm.com/”。

然后在org.apache.nutch.crawl包下的Crawl.java文件上点击右键,选择“Run as”,再选择“open run dialog”,在如图5所示的对话框中输入运行参数,然后点击“Run”。这样系统就可以运行了。

图 5. 运行 Crawler

运行 Crawler

在运行过程中,会出现很多的log信息,图6和图7是系统运行过程中的一些截图,从中可以看出正在抓取的网页URL地址和抓取速度等一些信息。等抓取任务成后,系统会自动生成相应的索引文件,以后查询器使用。在以后的文章中,会深入探讨相应的话题。

图 6. Nutch 运行信息 1

Nutch 运行信息 1

图 7. Nutch 运行信息 2

Nutch 运行信息 2

 

深入分析 Crawl 源代码

在了解了 Nutch 的运行过程之后,再来分析 Nutch 内部的运行流程是什么样子的,以及各个类之间是如何协同配置的?

Crawl的入口

正如在前文中所提到的,在运行 Crawl 时需要输入一些必要的参数,并且格式也是一定的。具体的用法是 Crawl <urlDir> [-dir d] [-threads n] [-depth i] [-topN N]。其中,<urlDir> 是必须有的参数;Crawl 是运行的主文件;-dir 表示存放的目标文件夹;-threads 表示抓取过程中其中的线程数;-depth 表示要抓取的深度层次。

如果在运行时不指定这些参数,那么Nutch会默认设定这个参数值。详见清单。

清单 5.
   Path dir = new Path("crawl-" + getDate());
    int threads = job.getInt("fetcher.threads.fetch", 10);
    int depth = 5;
int topN = Integer.MAX_VALUE;

如果指定了运行参数,Nutch会按照以下的方式来处理。

清单 6.
for (int i = 0; i < args.length; i++) {
      if ("-dir".equals(args[i])) {
        dir = new Path(args[i+1]);
        i++;
      } else if ("-threads".equals(args[i])) {
        threads = Integer.parseInt(args[i+1]);
        i++;
      } else if ("-depth".equals(args[i])) {
        depth = Integer.parseInt(args[i+1]);
        i++;
      } else if ("-topN".equals(args[i])) {
        topN = Integer.parseInt(args[i+1]);
        i++;
      } else if (args[i] != null) {
        rootUrlDir = new Path(args[i]);
      }
}

生成目标文件夹

在设定运行参数后,经过一个必要的处理,Nutch会生成若干个目标文件夹用来存储不同的文件内容,具体包括:crawlDb,linkDb,segments,indexes和index。

清单 7.
    Path crawlDb = new Path(dir + "/crawldb");
    Path linkDb = new Path(dir + "/linkdb");
    Path segments = new Path(dir + "/segments");
    Path indexes = new Path(dir + "/indexes");
Path index = new Path(dir + "/index");

注入、抓取和更新

当生成了所需要的目标文件夹之后,Nutch就可以开始抓取工作了。当然,在抓取网页过程中会使用功能类来完成相应的单元工作。具体来讲,在注入、抓取和更新过程中,会用来的功能类有Injector、Generator、Fetcher、ParseSegment和CrawlDb。

整个过程分为以下几个步骤:

注入
injector.inject(crawlDb, rootUrlDir);
抓取
Path segment = generator.generate(crawlDb, segments, -1, topN, System
          .currentTimeMillis(), false, false);
      if (segment == null) {
        LOG.info("Stopping at depth=" + i + " - no more URLs to fetch.");
        break;
      }
      fetcher.fetch(segment, threads);
更新
if (!Fetcher.isParsing(job)) {
        parseSegment.parse(segment);  
      }
      crawlDbTool.update(crawlDb, new Path[]{segment}, true, true);

4. 反转、索引、去重及合并

最后的工作就是生成索引,去重并合并索引。不过,现在一般都是会生成倒排索引文件,所以在建立索引之前还会有一个反转的操作,如清单所示。

清单 8.
linkDbTool.invert(linkDb, segments, true, true, false); // invert links

      // 索引
      indexer.index(indexes, crawlDb, linkDb, fs.listPaths(segments));
      //去重
      dedup.dedup(new Path[] { indexes });
      //合并
      merger.merge(fs.listPaths(indexes), index, tmpDir);

转:http://www.ibm.com/developerworks/cn/opensource/os-cn-nutchintro/

 

分享到:
评论

相关推荐

    Nutch搜索引擎·Nutch简单应用(第3期)

    Nutch是一个基于Java开发的开源网络爬虫搜索引擎,它是Apache软件基金会项目之一,主要用于抓取网页,索引网页内容,并且支持全文搜索。Nutch搜索引擎能够对局域网和整个Web进行爬取,且提供了一个命令行工具来控制...

    分布式搜索引擎nutch开发

    5. **Nutch实战应用** 实际应用中,Nutch通常与其他大数据组件一起使用,如HBase存储索引数据,Solr或Elasticsearch提供检索服务。此外,Nutch也可以作为数据挖掘、文本分析等项目的前期数据获取工具。 6. **Nutch...

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

    《Nutch实战》、《Hadoop权威指南》等相关书籍,以及博客文章(如给定的博文链接)都是学习Nutch的宝贵资源。同时,Apache官方文档和Nutch社区论坛也是获取帮助和解答问题的好去处。 通过阅读提供的Nutch.pdf文档...

    jid3lib-0.5.4与rtf-parser nutch

    Nutch 实战:http://www.ibm.com/developerworks/cn/opensource/os-cn-nutchintro/ Nutch还需要另外两个jar文件,jid3lib-0.5.1.jar和rtf-parser.jar

    nutch使用&Nutch;入门教程

    七、实战教程 “Nutch使用.pdf”和“Nutch入门教程.pdf”这两份文档将详细介绍如何从零开始使用Nutch,包括环境搭建、配置、启动爬虫、监控爬虫状态、查看抓取结果和索引数据等。通过这些教程,你可以快速掌握Nutch...

    Nutch入门教程 高清 带书签

    七、实战演练 通过阅读提供的“Nutch入门教程.pdf”,你可以学习如何安装Nutch、配置环境、创建并运行爬虫任务、查看抓取日志、分析抓取结果、调试插件等步骤,逐步掌握Nutch的使用。 总结来说,Nutch是一款强大的...

    nutch初体验

    2. **《nutch入门学习.pdf》**:这可能是更深入的学习资料,可能包含实战案例和高级特性的讲解,帮助进阶者理解Nutch的内在工作机制。 **五、实践操作** 学习Nutch通常包括以下步骤: 1. **环境准备**:安装Java...

    Lucene nutch 搜索引擎 开发 实例 源码

    《Lucene与Nutch搜索引擎开发实例详解》 在信息技术领域,搜索引擎已经成为不可或缺的一部分,它们能够高效地处理...同时,实战经验将使开发者具备构建自定义搜索引擎的能力,为大数据时代的信息检索提供强大的工具。

    nutch_recrawl_mergecrawl.rar_nutch_nutch recrawl_recrawl

    实战应用** Nutch 的 `recrawl` 和 `mergecrawl` 在实际项目中有着广泛的应用。例如,在新闻聚合服务、学术研究领域以及企业内部信息检索中,都需要定期更新索引以获取最新内容。通过这两个工具,可以有效地管理和...

    Windows配置Nutch.rar

    本来有机会接个搜索引擎项目但最终因价格问题双方谈崩为此我感到深深遗憾失去了个极好实战机会但我不想因此放弃对搜索引擎学习和实战在网上听到很多人推荐Nutch所以我打算学习下Nutch要学习Nutch还是先从安装和使用...

    Lucene.Nutch搜索引擎开发

    4. **Nutch教程PPT**: PPT形式的教学材料通常以简洁明了的方式呈现关键知识点,可能包括Nutch的工作原理、架构设计、主要模块介绍(如Crawldb、Segment、Indexer等)、API使用方法以及实战案例。这有助于读者快速...

    Lucene+Nutch搜索引擎开发(配套光盘资源)

    总之,《Lucene+Nutch搜索引擎开发》的配套光盘资源是一套全面的学习材料,涵盖了从基础理论到实战应用的多个层面,对深入理解和应用搜索引擎技术有着极大的帮助。通过系统学习和实践,你将能够构建并优化自己的搜索...

    Nutch1.7二次开发培训讲义

    ### Nutch 1.7 二次开发培训讲义知识点概览 #### 一、环境搭建与准备工作 **1. 开发环境的选择与配置** - **操作系统:** 二次开发Nutch时,开发阶段的操作系统选择非常灵活,只要安装了JDK(Java Development Kit...

    Lucene+nutch搜索引擎开发(源代码)

    - **实战经验**:通过实际操作和调试源代码,提升在搜索引擎开发中的实践能力。 总的来说,《Lucene+nutch搜索引擎开发(源代码)》是一个宝贵的教育资源,对于想要深入学习和实践搜索引擎开发的开发者来说,它提供...

    人工智能-项目实践-搜索引擎-基于Nutch+ElasticSearch+MySQL+SSM的简易搜索引擎

    标题中的“人工智能-项目实践-搜索引擎-基于Nutch+ElasticSearch+MySQL+SSM的简易搜索引擎”揭示了一个项目,旨在构建一个简易的搜索引擎,利用...同时,这也是一个很好的实战平台,可以锻炼问题解决和系统集成的能力。

    大数据云计算技术 hadoop实战培训(共56页).ppt

    Hadoop由Doug Cutting开发,最初是Nutch搜索引擎的一部分,受到Google的MapReduce、GFS和Bigtable三篇论文的启发。Hadoop生态系统包括HDFS(Hadoop Distributed File System)、MapReduce和HBase等组件。HDFS是...

Global site tag (gtag.js) - Google Analytics