Apache Nutch 2.3.1插件无法正常工作

时间:2016-07-26 12:48:33

标签: java apache plugins solr nutch

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

  1. 创建一个像$ NUTCH_HOME / src / plugin / myPlugin
  2. 这样的目录
  3. 将index-metadata复制到我的plugina并创建一个文件myField.java cp -r index-metadata / * myPlugin /
  4. 目录列表应该像
  5. myPlugin/plugin.xml
    build.xml
    ivy.xml
    src/java/org/apache/nutch/indexer/AddField.java
    
    1. plugin / myplgin / plugin.xml应如下所示
    2. <?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,如
      2. <?xml version="1.0" encoding="UTF-8"?>
        <project name="myPlugin" default="jar">
          <import file="../build-plugin.xml"/>
        </project>
        
        1. 然后
        2.   

          <ant dir="myPlugin" target="deploy" />

          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中的给定示例)

          4. 当我在本地模式下运行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进行爬行?

1 个答案:

答案 0 :(得分: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中看到这些日志,那意味着控制将进入插件类。