【问题标题】:Avro mapreduce job failing java.lang.IncompatibleClassChangeErrorAvro mapreduce 作业失败 java.lang.IncompatibleClassChangeError
【发布时间】:2014-07-15 10:40:16
【问题描述】:

我正在使用 HDP 2.0 - hadoop 2.2.0 和 Apache Avro 1.7.4 并遵循 avro mapreduce 指南以获取新的 M/R api here

我收到以下错误

2014-07-15 05:46:04,354 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
    at org.apache.avro.mapreduce.AvroKeyInputFormat.createRecordReader(AvroKeyInputFormat.java:47)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:491)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:734)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)

似乎我正在混合新旧 api。有什么猜测吗? 谢谢

【问题讨论】:

  • 不,您正在混淆 Hadoop 版本。我猜 Avro 1.7.4 不是用 Hadoop 2.2.x 编译的。
  • 也找到了。谢谢

标签: hadoop mapreduce avro


【解决方案1】:

实际上找到了问题的解决方案。官方报道here

简单的解决方案 - 需要针对 hadoop 2 编译 avro

<dependency>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-mapred</artifactId>
    <version>1.7.4</version>
    <classifier>hadoop2</classifier>
</dependency>

【讨论】:

    【解决方案2】:

    对我来说,我通过将classifier:"hapdoop2" 添加到我们的build.gradle 文件中解决了这个问题:

     avro_mapred  : [group:"org.apache.avro", name:"avro-mapred", version:"1.7.7", classifier:"hadoop2"],
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2015-08-26
      • 2014-02-06
      • 1970-01-01
      相关资源
      最近更新 更多