当前位置: 首页 > 面试题库 >

Apache Nutch:FetcherJob在Gora中引发NoSuchElementException

束福
2023-03-14
问题内容

我开箱即用运行Apache Nutch 2.3.1,它使用Gora
0.6.1。我已按照此处的说明进行操作:http :
//wiki.apache.org/nutch/RunNutchInEclipse

InjectorJob。很好。

现在,我正在运行FetcherJob,而Gora MemStore用作数据存储。我gora.properties包含

gora.datastore.default=org.apache.gora.memory.store.MemStore

这引发:

2016-10-02 22:55:54,605 ERROR mapreduce.GoraRecordReader (GoraRecordReader.java:nextKeyValue(121)) - Error reading Gora records: null
2016-10-02 22:55:54,605 INFO  mapred.MapTask (MapTask.java:flush(1460)) - Starting flush of map output
2016-10-02 22:55:54,614 INFO  mapred.LocalJobRunner (LocalJobRunner.java:runTasks(456)) - map task executor complete.
2016-10-02 22:55:54,615 WARN  mapred.LocalJobRunner (LocalJobRunner.java:run(560)) - job_local874667143_0001
java.lang.Exception: java.lang.RuntimeException: java.util.NoSuchElementException
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.RuntimeException: java.util.NoSuchElementException
    at org.apache.gora.mapreduce.GoraRecordReader.nextKeyValue(GoraRecordReader.java:122)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:556)
    at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80)
    at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.NoSuchElementException
    at java.util.concurrent.ConcurrentSkipListMap.firstKey(ConcurrentSkipListMap.java:2036)
    at org.apache.gora.memory.store.MemStore.execute(MemStore.java:128)
    at org.apache.gora.query.impl.QueryBase.execute(QueryBase.java:73)
    at org.apache.gora.mapreduce.GoraRecordReader.executeQuery(GoraRecordReader.java:67)
    at org.apache.gora.mapreduce.GoraRecordReader.nextKeyValue(GoraRecordReader.java:109)
    ... 12 more
2016-10-02 22:55:55,383 INFO  mapreduce.Job (Job.java:monitorAndPrintJob(1360)) - Job job_local874667143_0001 running in uber mode : false
2016-10-02 22:55:55,385 INFO  mapreduce.Job (Job.java:monitorAndPrintJob(1367)) -  map 0% reduce 0%
2016-10-02 22:55:55,387 INFO  mapreduce.Job (Job.java:monitorAndPrintJob(1380)) - Job job_local874667143_0001 failed with state FAILED due to: NA
2016-10-02 22:55:55,396 INFO  mapreduce.Job (Job.java:monitorAndPrintJob(1385)) - Counters: 0
Exception in thread "main" java.lang.RuntimeException: job failed: name=, jobid=job_local874667143_0001
    at org.apache.nutch.util.NutchJob.waitForCompletion(NutchJob.java:119)
    at org.apache.nutch.fetcher.FetcherJob.run(FetcherJob.java:205)
    at org.apache.nutch.fetcher.FetcherJob.fetch(FetcherJob.java:251)
    at org.apache.nutch.fetcher.FetcherJob.run(FetcherJob.java:314)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.nutch.fetcher.FetcherJob.main(FetcherJob.java:321)

这种情况发生在Nutch和Gora的深处,我不知道为什么会这样。我尝试升级到Gora
0.8,但存在相同的问题。我尝试将Gora降级到0.6,同样的问题。我想切换到hBase之类的其他数据存储,但这对我目前的需求来说有点过头了。

请帮我解决这个问题。


问题答案:

我确认问题出在MemStore。

在0.6.1中存在一个错误:https :
//github.com/apache/gora/blob/apache-gora-0.6.1/gora-
core/src/main/java/org/apache/gora/memory/store
/MemStore.java#L128

这已经在master中解决:https :
//github.com/apache/gora/blob/master/gora-
core/src/main/java/org/apache/gora/memory/store/MemStore.java#L155,对#firstKey()的访问具有保护#isEmpty()

但是,不要尝试更新到Gora 0.7-SNAPSHOT,因为Nutch到目前为止尚未适应它。

编辑

如果您想在Nutch 2.x中使用Gora-0.7-SNAPSHOT,也许您可​​以这样做:

  1. 下载版本为0.7-SNAPSHOT的Gora主分支
  2. 不要mvn install在山/安装它在Maven的本地仓库
  3. 将此补丁应用到Nutch:https : //paste.apache.org/jjqz,以便Nutch 2.3.1将与Gora 0.7-SNAPSHOT一起使用
  4. 做Nutch的教学资料

我希望它能起作用:)

编辑2

关于使用HBase,进行本地安装非常容易。

  1. 如Nutch2Tutorial中所述,下载HBase 0.98.8-hadoop2
  2. 在目录中添加tar.gz文件,例如: /home/you/hbase
  3. cd /home/you/hbase/bin
  4. ./start-hbase.sh

现在,您可以启动并运行HBase。配置Nutch:

ivy / ivy.xml:查看@Emmanuel关于HBase的ivy依赖项配置的评论。

gora.properties:

gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
gora.datastore.autocreateschema=true
gora.datastore.scanner.caching=100

nutch-site.xml:

<configuration>
<property>
 <name>storage.data.store.class</name>
 <value>org.apache.gora.hbase.store.HBaseStore</value>
 <description>Default class for storing data</description>
</property>
</configuration>

做完了 它将采用HBase的所有默认配置:localhost,/ tmp / …,blablabla



 类似资料:
  • Gora 是一个应用于 NoSQL 数据库的 ORM 框架,支持包括:Apache HBase/Apache Cassandra

  • 我正在使用Mojang API从Minecraft玩家的用户名返回UUID。此方法在参数(我们想要知道UUID的播放器的用户名)中接受一个字符串。为了使用API的resultat,我使用SimpleJSON库(将JSON结果解析为要返回的字符串)。 我的方法抛出2个检查过的异常:IOExeption和Parse异常,因为我想要。当错误的用户名(因此不存在用户名)时,API返回一个空JSON对象,在

  • 问题内容: 代码就是这样 这在Linux系统上运行良好,但在Windows上却无法运行。其显示EOFError。我必须使用模式才能使其在Windows上运行。 为什么会发生这种情况,以及如何解决? 问题答案: 读取和写入泡菜时始终使用模式(用于写入和读取)。要“修复”现有文件,请使用转换其换行符。

  • 我正尝试在类的方法中使用(以支持拖放)。我想显示我拖动的文件的导入进度。然而,它并不起作用。我不明白问题是什么,或者是什么引起的。 例外情况:

  • 问题内容: 如果我 在表上有,如何抛出错误以阻止对该表进行更新? 问题答案: 这是一种可行的技巧。这不是干净的,但看起来可能可行: 本质上,您只是尝试更新不存在的列。

  • 问题内容: 有没有一种优雅的方法来处理块中引发的异常? 例如: 如何避免在/ 在块? 问题答案: 我通常这样做: 别处: