`

nutch plugin的流程以及如何自定义plugin

阅读更多

PluginRepository 是plugin的入口,保存了所有的Plugins,加载流程如下:

1. 解析plugin.folder下面的所有plugin的plugin.xml文件:

几个主要的解析函数如下:
  (1) parseExtension(rootElement, pluginDescriptor);
解析extension element:
     <extension id="org.apache.nutch.net.urlfilter.urllength"
              name="Nutch URL Length Filter"
              point="org.apache.nutch.net.urlfilter">   
      <implementation id="UrlLengthFilter"
                      class="org.apache.nutch.net.urlfilter.urllength.UrlLengthFilter">   
      </implementation>   
   </extension>
解析后加载到PluginDescriptor:
pPluginDescriptor.addExtension(extension);


  (2)parseLibraries(rootElement, pluginDescriptor);
解析下列的lib element:
   <runtime>
     <library name="lib-http.jar">
        <export name="*"/>
     </library>
   </runtime>
解析后加载到PluginDescriptor:
pDescriptor.addNotExportedLibRelative(libName);
pDescriptor.addNotExportedLibRelative(libName); 


  (3)parseRequires(rootElement, pluginDescriptor);      
解析requires :
   <requires>
      <import plugin="nutch-extensionpoints"/>
   </requires>
解析后加载到PluginDescriptor:
pDescriptor.addDependency(plugin);   确定依赖关系

(4) parseExtensionPoints(rootElement, pluginDescriptor);
解析extension point:  主要针对nutch-extensionpoints下面的plugin.xml
<extension-point
      id="org.apache.nutch.indexer.field.FieldFilter"
      name="Nutch Field Filter"/>
解析后加载到PluginDescriptor:
pPluginDescriptor.addExtensionPoint(extensionPoint);   

2. 对plugin的过滤:
   根据plugin.includes及plugin.excludes过滤plugin,并检查plugin的依赖关系,确认是否有“missing dependency”或“circular dependency”存在。

3. installExtensionPoints: 集合所有的ExtensionPoints;

4. installExtensions: 验证每个extension是否有对应的ExtensionPoint。

5. extension中的point的value必须在extension-point 中有定义, 即:在定义了某个plugin的plugin.xml之后,必须在nutch-extensionpoints的plugin.xml中注册下 .
6.
Nutch-site.xml中需定义“Plugin.folders”的value,指定plugin的路径。
<property>
          <name>plugin.folders</name>
          <value>plugins</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>

另外需要定义“plugin.includes”,确定要加载的plugin。
<property>
         <name>plugin.includes</name>
         <value>protocol-http|urlfilter-regex|parse-(text|html)|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
         <description>Regular expression naming plugin directory names to include.  Any plugin not matching this expression is excluded.
                          In any case you need at least include the nutch-extensionpoints plugin. By        default Nutch includes crawling just HTML and plain text via HTTP, and basic indexing and search plugins. In order to use HTTPS please enable protocol-httpclient, but be aware of possible intermittent problems with the         underlying commons-httpclient library.
           </description>
</property>
7.plugin.folders只是指示了在哪个文件目录可以找到所有的plugin;
plugin.includes必须把plugin包含进去,才能在PluginRepository中get想要的plugin。

 

 

---------------------------------------------------------------自定义plugin--------------------------------------------------------------------------------

1. 定义URLFilter的interface, 必须指定X_POINT_ID:(由于nutch已经定义了URLFilter插件了,这步省略)
public interface URLFilter extends Pluggable, Configurable {
  /** The name of the extension point. */
  public final static String X_POINT_ID = URLFilter.class.getName();
}

2. 定义UrlLengthFilter:
public class UrlLengthFilter implements URLFilter{
        //TODO: 具体实现
}

3. 在"plugin.folder"目录下添加一个 urlfilter-urllength 的plugin,相应的plugin.xml如下: extension节点的id属性值是UrlLengthFilter 类所在的package name,
   implementation 节点属性的class指定需要实现的具体类名,通过该名找到相关的类。

<plugin
   id="urlfilter-urllength"
   name="URL length Filter"
   version="1.0.0"
   provider-name="nutch.org"> 

   <requires>
      <import plugin="nutch-extensionpoints"/>    
   </requires>

   <extension id="org.apache.nutch.net.urlfilter.urllength"
              name="Nutch URL Length Filter"
              point="org.apache.nutch.net.urlfilter">  
      <implementation id="UrlLengthFilter"
                      class="org.apache.nutch.net.urlfilter.urllength.UrlLengthFilter">  
      </implementation>  
   </extension>

</plugin>

4. 确保nutch-extensionpoints的plugin.xml中有如下的extensionpoint定义: 这里id必须与上一步extension中的point对应。
<extension-point
      id="com.roboo.procrawl.net.URLFilter"
      name="Nutch URL Filter"
/>

5. 将这个插件的id(即urlfilter-urllength)添加到nutch-site.xml的"plugin.includes"定义中。

分享到:
评论

相关推荐

    基于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...

    nutch 初学文档教材

    5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 5.2.1 索引主要过程....27 5.2.2 工作流程分析....28 5.2.3 倒排索引(inverted index)....29...

    Nutch_插件深入研究

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

    eclipse配置nutch,eclipse配置nutch

    因此,利用Eclipse作为开发工具,可以简化Nutch的配置流程,提供一个友好的图形界面来管理项目和代码,同时利用其强大的调试功能,帮助开发者快速定位和解决问题。 ### 二、Eclipse配置Nutch的步骤详解 #### 步骤1...

    Nutch插件开发和服务器发布流程

    ### Nutch插件开发与服务器发布流程详解 #### 一、Nutch插件开发流程 **1. Nutch开发客户端环境搭建** 为了开始Nutch插件的开发工作,首先需要搭建一个适合的开发环境。这通常包括安装Java开发工具包(JDK)、...

    nutch的插件机制

    每个插件都有一个`plugin.xml`文件,用于描述插件信息,以及一个`build.xml`文件,指导Ant构建工具如何编译插件。 举例来说,如果我们想要创建一个插件,用于根据搜索词推荐相关网页,我们需要定义一个新的扩展点,...

    分布式搜索引擎nutch开发

    在本篇中,我们将深入探讨Nutch的开发细节,包括其架构、工作流程、配置以及如何进行定制化开发。 1. **Nutch架构** Nutch的核心架构分为四个主要部分:Crawling(爬虫)、Parsing(解析)、Indexing(索引)和...

    Nutch入门教程.pdf

    Nutch的主要工作流程包含爬取网页数据、解析网页内容、索引网页内容以及提供搜索接口供用户查询。Nutch利用了Lucene作为搜索引擎核心库,提供全文搜索功能,并且Nutch自身也是一个完整的应用程序,包括了爬虫和...

    nutch入门教程

    Nutch的安装过程涉及下载Nutch的发布包,解压缩,然后配置相关参数,如设置HADOOP_HOME指向Hadoop安装路径,以及根据硬件资源调整Nutch的内存分配。 **2.3 Tomcat的安装与配置** Nutch使用Tomcat作为其web服务器,...

    nutch入门.pdf

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

    Nutch入门.rar

    5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 5.2.1 索引主要过程....27 5.2.2 工作流程分析....28 5.2.3 倒排索引(inverted ...

    Nutch入门教程

    Nutch的基本组成和工作流程被详细讲解,包括爬虫的策略和流程、索引的主要过程、倒排索引等原理性内容。 7. Nutch工作流程分析 工作流程分析进一步深入到爬虫的工作策略和流程、索引过程、搜索和分析等部分,并对...

    nutch入门学习

    - **什么是plugin**:Nutch支持插件机制,允许用户自定义爬虫、索引器和搜索模块的行为。 - **使用plugin的好处**:增强功能、提升灵活性、简化开发流程。 - **plugin工作原理**:通过扩展点和插件注册机制,实现...

    nutch安装开发环境的配置

    2. **java.lang.RuntimeException: org.apache.nutch.plugin.PluginRuntimeException: java.lang.ClassNotFoundException: org.apache.nutch.net.RegexURLFilter** 这个问题可能是因为插件目录设置不正确。在 `...

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

    (1)在conf/nutch-default.xml中,将`plugin.folders`的值更改为`./src/plugin`。 (2)创建一个名为urls的目录,里面放一个txt文件,包含你要抓取的初始网址。在conf/nutch-site.xml中,添加`http.agent.name`...

    Nutch插件机制

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

    Nutch安装配置

    10. **扩展和优化**:Nutch支持插件机制,可以根据需求编写自己的插件,例如自定义爬虫策略、解析器或索引器。通过`plugin/`目录下的配置文件来启用或禁用插件。 总结来说,Nutch安装配置涉及Java环境、源码编译、...

    Nutch插件开发文档

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

    nutch2.3.1安装文档教程

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

Global site tag (gtag.js) - Google Analytics