Hadoop / Rubydoop +Cloud⁹:找到了类,但接口是预期的

时间:2013-12-13 17:15:03

标签: java ruby hadoop mapreduce jruby

我想使用Rubydoop在Wikipedia历史转储XML文件上运行Hadoop作业。 到目前为止,我设法加载Cloud⁹的XMLInputFormat Java类并将其映射到Ruby类:

module Cloud9
  require 'java'

  require File.expand_path('../../cloud9-1.5.0.jar', __FILE__)
  require File.expand_path('../../hadoop-core-1.2.1.jar', __FILE__)
  require File.expand_path('../../commons-logging-1.1.1.jar', __FILE__)

  java_import 'edu.umd.cloud9.collection.XMLInputFormat'
end

module Wikipedia
  class XmlInputFormat < ::Cloud9::XMLInputFormat

  end
end

并将XmlInputFormat添加到Rubydoop配置作业块:

input input_path, format: Wikipedia::XmlInputFormat

运行作业时,<page></page>标记开始分割后,我收到以下错误:

java.lang.Exception: java.lang.IncompatibleClassChangeError:   
Found class org.apache.hadoop.mapreduce.TaskAttemptContext, but interface was expected
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)

Caused by: java.lang.IncompatibleClassChangeError: Found class org.apache.hadoop.mapreduce.TaskAttemptContext, but interface was expected
at edu.umd.cloud9.collection.XMLInputFormat$XMLRecordReader.initialize(XMLInputFormat.java:102)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:521)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
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.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

我正在使用cloud9-1.5.0.jar和Rubydoop 1.1.0在本地运行Hadoop 2.1.2。

所以问题是:这是因为Cloud⁹和Rubydoop或本地使用的不兼容的hadoop版本(旧的/新的Hadoop API?)?怎么可能修好?

1 个答案:

答案 0 :(得分:0)

Hadoop 1.2.1与Cloud⁹lib1.5版之间存在不兼容性错误,因为更高版本的Hadoop(2.x)使用​​TaskAttemptContext接口而不是类。

现在使用 cloud9-1.4.0.jar 对我有用。