Apache Nutch 2.3.1 插件无法正常工作
Apache Nutch 2.3.1 plugin not going to work
我必须提取一些由 Apache Nutch 2.3.1 抓取的数据的元数据信息,Nutch 默认情况下不提供这些信息。为此,我必须编写一个插件。出于学习目的,我以 Nutch tutorial 作为起点。我知道本教程适用于 1.x 版本。我已经更改了所有必需的分类并成功构建了它。以下是我遵循的步骤。
- 创建一个类似 $NUTCH_HOME/src/plugin/myPlugin
的目录
- 将索引元数据复制到我的插件并创建一个文件myField.java
cp -r 索引元数据/* myPlugin/
- 目录列表应该像
myPlugin/plugin.xml
build.xml
ivy.xml
src/java/org/apache/nutch/indexer/AddField.java
- 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>
- 改build.xml喜欢
<?xml version="1.0" encoding="UTF-8"?>
<project name="myPlugin" default="jar">
<import file="../build-plugin.xml"/>
</project>
- 然后
<ant dir="myPlugin" target="deploy" />
编辑你的./conf/nutch-site.xml
<property>
<name>plugin.includes</name>
<value>plugin-1|plugin-2|myPlugin</value>
<description>Added myPlugin</description>
</property>
分别在schema.xml和solrindex-mapping.xml中添加以下行
<field name="pageLength" type="long" stored="true" indexed="true"/>
<field dest="pageLength" source="pageLength"/>
然后我编译了我写的代码(类似于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 进行抓取之前,有什么方法可以测试它吗?
尝试更改 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>
我认为应该可以解决问题。
也只是为了验证控件是否进入您的插件 class 或不在您的代码中添加一些信息日志,例如
LOG.info("printing from plugin");
如果您能够在 hadoop.log 中看到这些日志,则表示控件即将进入插件 class。
我必须提取一些由 Apache Nutch 2.3.1 抓取的数据的元数据信息,Nutch 默认情况下不提供这些信息。为此,我必须编写一个插件。出于学习目的,我以 Nutch tutorial 作为起点。我知道本教程适用于 1.x 版本。我已经更改了所有必需的分类并成功构建了它。以下是我遵循的步骤。
- 创建一个类似 $NUTCH_HOME/src/plugin/myPlugin 的目录
- 将索引元数据复制到我的插件并创建一个文件myField.java cp -r 索引元数据/* myPlugin/
- 目录列表应该像
myPlugin/plugin.xml build.xml ivy.xml src/java/org/apache/nutch/indexer/AddField.java
- 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>
- 改build.xml喜欢
<?xml version="1.0" encoding="UTF-8"?> <project name="myPlugin" default="jar"> <import file="../build-plugin.xml"/> </project>
- 然后
<ant dir="myPlugin" target="deploy" />
编辑你的./conf/nutch-site.xml
<property> <name>plugin.includes</name> <value>plugin-1|plugin-2|myPlugin</value> <description>Added myPlugin</description> </property>
分别在schema.xml和solrindex-mapping.xml中添加以下行
<field name="pageLength" type="long" stored="true" indexed="true"/> <field dest="pageLength" source="pageLength"/>
然后我编译了我写的代码(类似于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 进行抓取之前,有什么方法可以测试它吗?
尝试更改 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>
我认为应该可以解决问题。
也只是为了验证控件是否进入您的插件 class 或不在您的代码中添加一些信息日志,例如
LOG.info("printing from plugin");
如果您能够在 hadoop.log 中看到这些日志,则表示控件即将进入插件 class。