【问题标题】:Apache Nutch 2.3.1 plugin not going to workApache Nutch 2.3.1 插件不起作用
【发布时间】:2016-07-26 12:48:32
【问题描述】:

我必须提取 Nutch 默认不提供的 Apache Nutch 2.3.1 爬取数据的一些元数据信息。为此,我必须编写一个插件。出于学习目的,我以Nutch tutorial为起点。我知道本教程适用于 1.x 版本。我已经更改了所有必需的分类并成功构建它。以下是我遵循的步骤。

  1. 创建一个类似 $NUTCH_HOME/src/plugin/myPlugin 的目录
  2. 将 index-metadata 复制到我的插件并创建一个文件 myField.java cp -r index-metadata/* myPlugin/
  3. 目录列表应该像
myPlugin/plugin.xml
build.xml
ivy.xml
src/java/org/apache/nutch/indexer/AddField.java
  1. plugin/myplgin/plugin.xml 应该是这样的
<?xml version="1.0" encoding="UTF-8"?>
<plugin id="myPlugin" name="Add Field to Index"
    version="1.0.0" provider-name="your name">
   <runtime>
     <library name="myPlugin.jar">
       <export name="*"/>
     </library>
   </runtime> 
   <extension id="org.apache.nutch.indexer.myPlugin"
       name="Add Field to Index"
       point="org.apache.nutch.indexer.IndexingFilter">
     <implementation id="myPlugin"
         class="org.apache.nutch.indexer.AddField"/>
   </extension>
</plugin>
  1. 更改 build.xml 之类的
<?xml version="1.0" encoding="UTF-8"?>
<project name="myPlugin" default="jar">
  <import file="../build-plugin.xml"/>
</project>
  1. 然后

&lt;ant dir="myPlugin" target="deploy" /&gt;

  1. 编辑您的 ./conf/nutch-site.xml

    <property>
      <name>plugin.includes</name>
      <value>plugin-1|plugin-2|myPlugin</value>
      <description>Added myPlugin</description>
    </property>
    
  2. 分别在 schema.xml 和 solrindex-mapping.xml 中添加以下行

    <field name="pageLength" type="long" stored="true" indexed="true"/>
    <field dest="pageLength" source="pageLength"/>
    
  3. 然后我编译了我的书面代码(类似于 URL 中给出的示例)

当我在本地模式下运行 Nutch 时,以下是对 solr 步骤日志信息的索引

Active IndexWriters :
SOLRIndexWriter
    solr.server.url : URL of the SOLR instance (mandatory)
    solr.commit.size : buffer size when sending to SOLR (default 1000)
    solr.mapping.file : name of the mapping file for fields (default solrindex-mapping.xml)
    solr.auth : use authentication (default false)
    solr.auth.username : username for authentication
    solr.auth.password : password for authentication    
IndexingJob: done.

我还在 solr 架构中添加了字段 pageLength。根据我的预期,应该有一个新字段 pageLength 具有适当的值,但 solr 中没有字段。

问题出在哪里?它是一个简单的玩具示例。 这是索引步骤的 nutch 日志文件 (hadoop.log) 输出

2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: content dest: content
2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: title dest: title
2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: host dest: host
2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: batchId dest: batchId
2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: boost dest: boost
2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: digest dest: digest
2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: tstamp dest: tstamp
2016-07-26 16:53:25,649 INFO  solr.SolrMappingReader - source: pageLength dest: pageLength
2016-07-26 16:53:26,140 INFO  solr.SolrIndexWriter - Total 1 document is added.
2016-07-26 16:53:26,140 INFO  indexer.IndexingJob - IndexingJob: done.

如何确认插件是由 nutch 加载的? 其次,在我配置为nutch进行爬取之前,有什么方法可以测试一下Nutch插件?

【问题讨论】:

    标签: java apache plugins solr nutch


    【解决方案1】:

    尝试更改 plugin.xml 中的扩展 ID。将其更改为“org.apache.nutch.indexer.AddField”并重新构建 Nutch

    <extension id="org.apache.nutch.indexer.AddField"
           name="Add Field to Index"
           point="org.apache.nutch.indexer.IndexingFilter">
         <implementation id="myPlugin"
             class="org.apache.nutch.indexer.AddField"/>
    </extension>
    

    我认为这应该可以解决问题。

    也只是为了验证控件是否进入您的插件类或不在您的代码中添加一些信息日志,例如

    LOG.info("从插件打印");
    如果您能够在 hadoop.log 中看到这些日志,则意味着插件类将受到控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多