`

nutch plugin详细分析

阅读更多

当某个插件需要被加载时, Nutch 会加载所有插件的相关接口到缓存,此后每个插件需要实例的时候,根据相关接口和相关接口实现实例在缓存内的记录,使用反射实现一个实例并返回,下面以 QueryFilter 的所有插件被加载例子进行说明。
 
具体代码参看org.apache.nutch.seacher.QueryFilters<init>

( 1 )当第一次需要得到 QueryFilter 的一个子类的实例时,使用下面这句话试图获得所有的实例:
 
this.queryFilters =
(QueryFilter[]) conf.getObject(QueryFilter.class .getName());
 
(2)如果为空,则试图从插件仓库中得到该插件的扩展点:
 
ExtensionPoint point = PluginRepository.get(conf)
            .getExtensionPoint(QueryFilter.X_POINT_ID);
 
在 PluginRepository.get(conf) 这句话中,返回插件仓库,如果仓库为空,会初始化所有插件:
 
初始化所有插件PluginRepository.<init>
①     试图从缓存内获得插件仓库。
PluginRepository result = (PluginRepository)CACHE.get(conf);
②     如果未获得,则初始化所有插件
result = new PluginRepository(conf);
l         初始化以活动插件和扩展点的集合
fActivatedPlugins = new HashMap();
      fExtensionPoints = new HashMap();
      this.conf = conf;
l         获得插件存放位置
      String[] pluginFolders = conf.getStrings("plugin.folders");
l         实例化PluginManifestParser:
  PluginManifestParser manifestParser = new PluginManifestParser(conf, this);
   PluginManifestParser 是一个封装了PluginRepository的工具类,在构造时,分析每个插件的文件夹,把每个plugin.xml文件的内容进行分析,记录了所有的插件接口和插件接口内所包含的所有实现类的关系。
l         放入缓存
   CACHE.put(conf, result);
 
Plugin.xml 描述内容见附录一
 
(3)获得所有QueryFilter的子类描述。
Extension[] extensions = point.getExtensions();
 
(4)循环获得每个插件的两个参数,fieldName和rawFieldNames,生成每个filter插件实例。
for (int i = 0; i < extensions.length; i++) {
          Extension extension = extensions[i];
          ArrayList fieldNames = parseFieldNames(extension, "fields");
          ArrayList rawFieldNames = parseFieldNames(extension, "raw-fields");
          if (fieldNames.size() == 0 && rawFieldNames.size() == 0) {
            if (LOG.isWarnEnabled()) {
              LOG.warn("QueryFilter: " + extension.getId()
                     + " names no fields.");
            }
            continue;
          }
          filters[i] = (QueryFilter) extension.getExtensionInstance();
          FIELD_NAMES.addAll(fieldNames);
          FIELD_NAMES.addAll(rawFieldNames);
          conf.setObject("FIELD_NAMES", FIELD_NAMES);
          RAW_FIELD_NAMES.addAll(rawFieldNames);
          conf.setObject("RAW_FIELD_NAMES", RAW_FIELD_NAMES);
        }
 

 
<?xml version="1.0" encoding="UTF-8"?>
 
<!— 插件的根元素,根元素的属性表明了一个插件的基本身份-->
<plugin id=” 唯一身份(被插件仓库作为身份标示)” name=”名称” version=”版本号”
provider=” 作者”class=”类名(可选)”>
 
<!-- 以下两个内容中引用的类库,都是作为本类使用反射时生成实例所需要的类库-->
<runtime>
    <library name=" 运行时的类库">
         <!— 如果存在此元素,则保存到fExportedLibs(输出类库集合),否则存放到
fNotExportedLibs (非输出类库集合)-->
         <export name="*"/>
    </library>
</runtime>
 
<requires>
    <!— 需要注意,此处所需要的类库,包括该类库所需的类库,都不得在此引用本插件-->
    <import plugin=" 所需类库"/>
</requires>
 
<extension id=" 本类的包名(从代码中看没有被使用)"
              name=" 类名(从代码中看没有被使用)"
              point=" 扩展点类名(即接口名)">
      <implementation id=" 实现扩展的唯一标识(与类名相同,被parse-plugins.xml
作为身份表示使用)"
           class=" 实现扩展的类的类名"/>
      <parameter name=" 参数名" value="参数值"/>
</extension>
 
<!— 仅在nutch-extensionpoints\plugin.xml中存在,一次性加载纪录下所有的扩展点的名称-->
< extension-point id=” 扩展点唯一标识”name=”扩展点名”/>
 
</plugin>

分享到:
评论
2 楼 p_x1984 2009-12-26  
呵呵,后面还有很多的工作没做,现在貌似时间还紧张,有时间的话,一定会的!
1 楼 comsci 2009-12-26  
这位老大,可不可以把你在NUTCH上面的经验写成一个连续,名叫“建设基于NUTCH搜索引擎的详细说明”这样一个文档呢?

相关推荐

    基于ApacheNutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件nutch-htmlunit.zip

    Nutch Htmlunit Plugin 重要说明: 当前项目基于Nutch 1.X系列已停止更新维护,转向Nutch 2.x系列版本的新项目:http://www.oschina.net/p/nutch-ajax 项目简介 基于Apache Nutch 1.8和Htmlunit...

    eclipse配置nutch,eclipse配置nutch

    本文将详细解析如何在Eclipse中配置Nutch,以便于开发者更好地理解和操作这一过程。 ### 一、理解Nutch与Eclipse的结合 Nutch是一个基于Hadoop的框架,用于构建可扩展且高性能的网络爬虫。它不仅能够抓取网页,还...

    nutch爬虫系统分析.doc

    本文将对Nutch爬虫系统进行详细的分析,包括Nutch的体系结构、抓取部分、配置文件分析等方面。 一、Nutch简介 Nutch是一个基于Java的开源爬虫系统,由 Doug Cutting和Mike Cafarella创建于2003年。Nutch的主要功能...

    nutch 初学文档教材

    4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 5.2.1 索引...

    nutch的插件机制

    要使用Nutch插件,开发者需要在`conf/nutch-site.xml`配置文件中添加插件的名称到`plugin.includes`列表中。每个插件都有一个`plugin.xml`文件,用于描述插件信息,以及一个`build.xml`文件,指导Ant构建工具如何...

    Nutch入门教程.pdf

    以上内容构成了Nutch入门教程的核心知识点,从简介、安装配置、初体验、基本原理、分析方法、分布式文件系统以及应用等多方面,详细介绍了Nutch框架及其使用方法,为对搜索引擎感兴趣的用户提供了一个全面的学习资源...

    Nutch_插件深入研究

    Nutch插件允许开发者根据特定需求定制和扩展Nutch的功能,如自定义爬虫策略、数据解析方式、索引处理逻辑等。 #### 二、Nutch插件开发详解 Nutch插件的开发涉及到以下几个关键步骤: 1. **创建插件目录结构**:...

    nutch入门.pdf

    在应用方面,提到了如何修改源码和使用插件机制(plugin),以及如何利用Nutch API和OpenSearch API接口。插件机制是Nutch灵活性的重要体现,它允许用户通过插件来扩展Nutch的功能。编写插件部分讲解了如何开发自己...

    Nutch插件机制

    本文将详细介绍Nutch插件机制的核心概念、工作原理以及如何开发和使用插件。 #### 二、Nutch插件机制的重要性 Nutch之所以采用插件机制,主要有以下三个原因: 1. **可扩展性**:通过插件,Nutch允许用户根据自己...

    nutch安装开发环境的配置

    在安装和配置 Nutch 开发环境时,可能会遇到各种问题,以下是对这些问题的详细解答。 首先,确保你已经下载了 Nutch 的正确版本。Nutch 的官方网站可能只提供最新的稳定版本,如 1.6 或 2.1。如果需要其他版本,...

    Nutch插件开发文档

    插件(Plugin)作为Nutch的核心组件之一,为用户提供了一种灵活的方式来定制和扩展Nutch的功能。通过这种方式,不仅可以增强Nutch的原有功能,还能根据特定的需求添加新的功能模块。 Nutch插件系统具有以下优势: ...

    分布式搜索引擎nutch开发

    Nutch有一个活跃的开发者社区,提供了详细的文档、教程和示例代码,帮助用户快速入门并解决问题。Apache官方网站上的Nutch项目页面是获取最新资讯和资源的主要渠道。 总之,Nutch是一个强大的分布式搜索引擎开发...

    nutch入门教程

    ### Nutch入门教程知识点解析 #### 1. Nutch简介 **1.1 什么是Nutch** Nutch是一个开源的搜索引擎框架,完全基于Java开发,旨在帮助用户构建和运行自己的搜索引擎。它提供了一系列的工具和服务,使用户能够从...

    nutch2.3.1安装文档教程

    ### Nutch 2.3.1 安装与配置指南 #### 一、配置 ant 环境 在安装 Nutch 之前,首先需要确保环境中已经安装了 Apache Ant 工具,因为 Nutch 的构建过程依赖于 Ant。以下是具体步骤: 1. **下载 ant**: - 访问 ...

    Nutch配置环境\Nutch1[1].4_windows下eclipse配置图文详解.docx

    本文将详细介绍如何在Windows环境下配置Nutch 1.4,并使用Eclipse进行开发。以下是你需要知道的关键步骤: 1. **安装JDK**: 在配置Nutch之前,首先确保已安装Java Development Kit (JDK)。这里推荐使用JDK 1.6。...

    Nutch安装配置

    【Nutch安装配置】是关于开源搜索引擎项目Nutch的详细操作流程,主要涉及源码编译、环境搭建和系统配置等内容。Nutch是一款基于Java的搜索引擎框架,常用于大数据环境下的网页抓取、分析和索引。在进行Nutch安装配置...

    Nutch1.7二次开发培训讲义 之 腾讯微博抓取分析

    本篇培训讲义主要针对的是如何使用 Nutch 1.7 版本对腾讯微博进行抓取分析,特别强调了针对动态网页的抓取及自定义解析插件的方法。 #### 二、抓取目标与规则设置 ##### 1. 入口 URL 抓取的入口 URL 为:`...

    基于Nutch 的插件系统的原理分析

    ### 基于Nutch的插件系统的原理分析 #### 一、引言 随着互联网技术的迅猛发展,搜索引擎作为信息检索的重要工具,在日常生活及工作中扮演着越来越重要的角色。然而,传统的搜索引擎架构往往存在难以扩展和升级的...

    Nutch入门.rar

    4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 ...

    \Lucene Nutch和安装说明文旦

    描述中的“LuceneChapter12 光盘使用说明.DOC”可能是指一份包含第12章内容的文档,这部分可能详细解释了如何在实际操作中运用Lucene和Nutch,尤其是光盘中的资源如何被利用。 **Lucene详解** Apache Lucene是一个...

Global site tag (gtag.js) - Google Analytics