Nutch没有删除重复项(在一个solr核心而不是另一个)

时间:2013-07-28 21:28:42

标签: apache hadoop solr nutch

我有一个我似乎无法调试的Nutch问题。

我开始使用Nutch抓取并将我们的页面索引到solr核心1.它运行正常。工作就像应该完成一样。

虽然我想开始索引或分页到我们的solr核心0,以及我们想要索引的其他项目。

索引不是问题,它会抓取并索引正常。但是在核心0上,它在索引末尾的重复数据删除任务上仍然失败。我收到以下错误(如下)。据我所知,schema.xml和solrconfig.xml文件在core0和core1上都有相同的东西,除了在core0中,不再需要url字段,因为其他索引项没有url,所以id field是所有这些字段的标准必填字段。这可能导致问题吗?什么是重复数据删除尝试做什么以及它的方式是什么?我怎么能通过这个?感谢:

2013-07-26 16:55:17,797 INFO solr.SolrIndexWriter - Indexing 157 documents 2013-07-26 16:55:30,407 INFO solr.SolrMappingReader - source: content dest: content 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: title dest: title 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: host dest: host 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: segment dest: segment 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: boost dest: boost 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: digest dest: digest 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: tstamp dest: tstamp 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: url dest: id 2013-07-26 16:55:30,444 INFO solr.SolrMappingReader - source: url dest: url 2013-07-26 16:55:31,590 INFO indexer.IndexingJob - Indexer: finished at 2013-07-26 16:55:31, elapsed: 00:00:19 2013-07-26 16:55:31,593 INFO solr.SolrDeleteDuplicates - SolrDeleteDuplicates: starting at 2013-07-26 16:55:31 2013-07-26 16:55:31,593 INFO solr.SolrDeleteDuplicates - SolrDeleteDuplicates: Solr url: http://<domain>:<port>/solr/core0/ 2013-07-26 16:55:32,043 WARN mapred.FileOutputCommitter - Output path is null in cleanup 2013-07-26 16:55:32,043 WARN mapred.LocalJobRunner - job_local1142877999_0055 java.lang.Exception: java.lang.NullPointerException at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354) Caused by: java.lang.NullPointerException at org.apache.hadoop.io.Text.encode(Text.java:388) at org.apache.hadoop.io.Text.set(Text.java:178) at org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormat$1.next(SolrDeleteDuplicates.java:270) at org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormat$1.next(SolrDeleteDuplicates.java:241) at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:230) at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:210) at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:48) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:366) at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:223) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:679)

1 个答案:

答案 0 :(得分:0)

由于文档没有url字段,因此文档的id为空,因此在运行以下方法时抛出空指针异常。

下面是来自nutch 1.7 trunk的SolrDeleteDuplicate类的代码,其中solr记录被id字段删除。

updateRequest.deleteById(solrRecord.id);
  • updateRequest =&gt; org.apache.solr.client.solrj.request.UpdateRequest的实例

  • solrRecord =&gt;需要删除的solr文档。

  • id =&gt; solr文档的id,它是从nutch发行版的conf文件夹中的solrindex-mapping.xml中读取的。 (如果这是null,则会抛出异常)