plugin(插件)为nutch提供了一些功能强大的部件,nutch中很多功能都是使用插件实现的,而使用者也可以自行开发更多适合自已的插件。

nutch使用这样的plugin系统有什么好处:

1:可扩展性       通过plugin,nutch允许任何人扩展它的功能,而我们要做的只是对给定的接口做简单的实现,举个例子:我们在NUTCH里使用LOADBALANCE进行下载的插件,它就是一个对protocol这个接口的实现。

2:灵活性      因为每个人都可以根据自己的需求而写自己的plugin,这样plugin就会有一个很强大的资源库。这样对应用nutch程序员来说,他可以在自己的搜索引擎上安装符合自己需求的插件,而这些插件就在nutch的plugins中。这对于正在应用nutch的开发者来说应该是一个巨大的福音,因为你有了更多的关于内容抽取的算法来选择,很容易就增加了各种过滤规则、下载方式、解析文件类型等。

3:可维护性
每个开发者只要关注自己的问题。对于内核的开发者在为引擎内核扩展的同时,为plugin添加一个描述它的接口就可以了。一个plugin的开发者只要关注这个plugin所要实现的功能,而不需要知道整个系统是怎么工作的。它们仅仅需要知道的是plugin和plug之间交换的数据类型。这使得内核更加简单,更容易维护。

plugin的工作原理

nutch的plugin系统是基于Eclipse 2.x中对插件的使用。plugins对nutch的工作是很重要的。nutch中的fetch(下载)、parsing(分析),indexing(索引),searching(查询)等都是通过不同的plugins来实现的。

在编写一个plugin的时候,要为一个扩展点添加一个或者更多的扩展项。这些Nutch的扩展点是Nutch在一个plugin中已经定义好了,这个plugin是NutchExtensionPoints(所有的扩展点都会在NutchExtensionPoints 的plugin.xml这个文件中列出)。每一个扩展点都定义了一个接口,这个接口在扩展时必须被实现。


这些扩展点如下:
indexingFiltering:
org.apache.nutch.indexer.IndexingFilter
允许为所索引中的Field添加元数据。所有的实现了这个接口plugin会在分析的过程中顺序的逐个运行.

Parser:
org.apache.nutch.parse.Parser    如果你要在nutch中扩展分析一个新内容类型或者从现有的可分析的内容摘取更多的数据。可实现接口parser,读取所抓取的document,摘取将被索引的数据。

HtmlParseFilter:
org.apache.nutch.parse.HtmlParseFilter
为html parser添加额外的元数据
这个接口是对以DOM树为基础的HTML文档的分析器的扩展点,它允许你向这个HTMLParsers添加metadata.

protocol:
org.apache.nutch.protocol.Protocol
实现Protocol的plugin可以使得nutch能使用更多的网络协议(ftp,http)去抓取数据

URLFileter:
org.apache.nutch.net.URLFilter
实现这个扩展点的plugin会对nutch要抓取的网页的urls进行限制,RegexURLFilter提供了通过正则表达式来对Nutch爬行网页的urls的控制。如果你对urls还有更加复杂的控制要求,你可以编写对这个urlfilter的实现

URLNormalizer:
org.apache.nutch.net.URLNormalizer
URL规范化

ScoringFilter:
org.apache.nutch.scoring.ScoringFilter
Nutch分数计算接口,可通过实现该接口以影响Nutch分数的计算方式,其默认的OPIC分数计算方法由类 OPICScoringFilter 提供。此外,参与计算分数的类还有 ScoringFilters,ParseOutputFormat。其中 ScoringFilters 负责将各个计分插件加载到系统中,并实现链式计分的过程;而ParseOutputFormat在解析结果输出之前,将页面的分数分配到该页面的各个子页面中,使得Nutch的更新模块可以使用这些数据更新CrawlDB数据库。

SegmentMergeFilter:
org.apache.nutch.segment.SegmentMergeFilter

segment合并过滤接口。按一定的规则将多个SEGMNET进行合并、过滤。

plugin的内部结构

protocol扩展点插件开发

以protocol扩展点为例,我们对NUTCH中的数据下载方式进行改变,使用我们的方式进行下载。
首先,新建源码目录,目录中包含3个xml,一个源程序目录。

plugin.xml :向nutch描述这个plugin的信息
build.xml :告诉ant怎样编译这个plugin
Ivy.xml:这个plugin的ivy配置信息

源程序有两个JAVA类:

Http.java:实现protocol接口 ,这里为简便,继承自httpbase类,httpbase类是一个API意义的类,实现了protocol接口,这样我们可减少很多工作。


HttpReponse.java:用于实现下载并返回信息。

图1:

图2,接上图:

plugin.xml说明
<plugin
   id="protocol-http-netty"  插件ID
   name="protocol http netty Plug-in" 插件名称
   version="1.0.0" 插件版本
   provider-name="pycredit"> 插件提供者的ID

<runtime>
      <library name="protocol-http-netty.jar"> 发布的JAR包
         <export name="*"/> 
      </library>
   </runtime>

<requires>
      <import plugin="nutch-extensionpoints"/> 依赖的插件
 <import plugin="lib-http">
   </requires>

<extension id="org.apache.nutch.protocol.netty.http" 扩展的插件ID
              name="HttpProtocol" 扩展的插件名
              point="org.apache.nutch.protocol.Protocol"> 插件的扩展点ID
      <implementation id="org.apache.nutch.protocol.netty.http.Http" 插件实现ID
                      class="org.apache.nutch.protocol.netty.http.Http"> 实现类
        <parameter name="protocolName" value="http"/> 插件的参数
      </implementation>
      -->
   </extension>
</plugin>

实现接口编写代码完毕后修改配置步骤如下:

1、src/plugin/build.xml中,在
<target name="deploy">;
<target name="test">;
<target name="clean">;
分别增加相应配置,将我们新开发的插件添加进去,如:
<ant dir="protocol-http-netty" target="deploy">

2、修改nutch/build.xml文件在
<target name="release" depends="compile-core" description="generate the release distribution">
中增加配置如:
<packageset dir="${plugins.dir}/protocol-http-netty/src/java"/>
 3、 注意检查${plugins.dir}/protocol-http-netty/src/build.xml,其project标签name值要为"protocol-http-netty"

在Nutch使用plugin

如果要在Nutch使用一个给定的plugin,你需要对conf/nutch-site.xml进行编辑并且把plugin的名字添加到plugin.includes中

<property>
    <name>searcher.dir</name>
    <value>I:/nutch-0.7.1/crawled</value>
</property>
<property>
<name>plugin.includes</name>
<value>nutch-extensionpoints|protocol-http|urlfilter-regex|parse-(text|html)|index-basic|query-(basic|site|url)|recommended
</value>

nutch 插件开发[资料整理]相关推荐

  1. 程序员优秀学习资料整理(不断更新中)

    如果你发现自己陷入各种新技术.工具包围中,而纠结于该选择哪些学习,读读这篇文章,技术的执念. 综合资源 资源链接汇集 awesome - 各种主流语言的优秀项目汇集 :+1: lists - 资源集合 ...

  2. epoll相关资料整理

    http://www.cppblog.com/converse/archive/2008/10/13/63928.html epoll相关资料整理 学习epoll有一段时间了,最近终于有一个服务器采用 ...

  3. 深入理解计算机系统 -资料整理 高清中文版_在所不辞的博客-CSDN博客_深入理解计算机系统第四版pdf

    深入理解计算机系统 -资料整理 高清中文版_在所不辞的博客-CSDN博客_深入理解计算机系统第四版pdf

  4. STM32 资料整理贴(更新到10年1月)[转]

    看到9G从QQ群上转的,后来还有没贴完 ,后面还有一大堆 链接地址 http://www.stmsky.com/bbs/viewthread.php?tid=2103&extra=page%3 ...

  5. H.264的一些资料整理

    本文转载自 http://blog.csdn.net/ljzcom/article/details/7258978, 如有需要,请移步查看. Technorati 标签: H.264 资料整理 --- ...

  6. [资料整理] Decentralized Services Orchestration, Choreography相关的几篇论文

    昨天讨论了一下论文笔记管理的方法, 我以前用过各种做论文笔记的方法. 打算逐步整理一下以前的论文笔记, 标题里注明为"[资料整理]". M. G. Nanda, S. Chandr ...

  7. 【方案】0615冰箱运行监测系统资料整理:进展及规划

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 资料整理重点内容回顾 改名字:冰箱运行监测系统 需求:[S操作]冰箱正常运行监控系统 ...

  8. 文字检测与识别资料整理

    博主关注文字检测和识别,资料整理和论文解读都非常详细: https://www.cnblogs.com/lillylin/p/6893500.html#4033329 博主的阅读习惯,积累和输出输出: ...

  9. LPS25HB 气压计 资料整理

    LPS25HB 气压计 资料整理 文章目录 LPS25HB 气压计 资料整理 LPS25HB 的主要特性: LPS25HB 的应用场景: LPS25HB的管脚: LPS25HB的机械物理性能展表 LP ...

最新文章

  1. golang 传值 传引用 简介
  2. 这样的阅读工具,人手一个不过分吧?
  3. 【Linux】一步一步学Linux——hexdump命令(267)
  4. Spring--IoC(1)
  5. python基础(part9)--容器类型之集合
  6. 怎么运行verilog语言_(六) Verilog入门之有限状态机
  7. python中回车怎么表示_如何在python中使用读取行仅拆分回车符?
  8. 今日恐慌与贪婪指数为84 贪婪程度有所上升
  9. java下载好怎么验证_Java JDK下载、安装和验证
  10. Xna游戏编辑器开发(WinForm内嵌Xna)
  11. Revit API切换三维视图
  12. 以前计算机弹玻璃的游戏叫什么,小时候做过的游戏 你还记得多少 是否还有所保留呢...
  13. 思科、华为、Dell visio图下载
  14. vim中替换字符串的方法有哪些
  15. native APP,hybrid APP和web APP
  16. 这才叫会PS,普通照片分分钟P成好莱坞海报!
  17. DevOps :Jenkins pipeline + sonarQube 完成静态检测 + junit 覆盖率报告。
  18. idea创建maven项目失败, Failed to create a Maven project
  19. bem css_CSS体系结构:块元素修饰符(BEM)和原子CSS
  20. Mysql数据库知识点归纳汇总

热门文章

  1. CTFSHOW-phpCVE Writeup
  2. MDE RCMDE
  3. 一曰任官,二曰信赏,三曰必罚
  4. java运费模板设计,拼多多运费模板怎么设置
  5. 苹果cms vod.html,苹果cms,怎么可以修改vod\seach.html接口,增加搜索时的内置条件?...
  6. 浅谈线束测试仪是如何保障汽车的性能
  7. 手机显示视频服务器连接异常怎么回事,荧石云视频显示服务器连接异常
  8. Java第八次课程作业
  9. 三菱FX1N两轴标准程序,程序包括有轴点动,回零,相对定位, 绝对定位,程序结构清晰明了,注释完整
  10. 桌面远程协议-编解码