我正在尝试运行map reduce工作,它将avro文件作为输入并进行一些处理。我按照apache给我们的示例程序
http://avro.apache.org/docs/1.7.6/mr.html
但我继续遇到这个异常
java.lang.Exception: java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
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.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
对我可能做错的任何想法?我在底部指定了我的pom配置。我也使用MapR版本4。
<repositories>
<repository>
<id>MapR</id>
<url>http://repository.mapr.com/maven/.</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-mapred</artifactId>
<version>1.7.6</version>
<classifier>hadoop2</classifier>
</dependency>
</dependencies>
答案 0 :(得分:0)
此类错误的常见原因是:
mapreduce.job.user.classpath.first
配置属性设置为true来强制您的类路径工件首先出现在任务的类路径中。你的pom中还有另一个错误可能会导致你出现问题,也许就是你所看到的问题。您正在使用为hadoop2编译的avro-mapred工件,而您依赖的hadoop工件是hadoop1。这些不应该兼容。如果您正在使用hadoop1,请在avro-mapred上松开hadoop2分类器,如果您正在使用hadoop2,请删除hadoop-core并改为使用hadoop-mapreduce-client-core。
答案 1 :(得分:0)
我已经通过在引导操作中注入正确的Avro jar解决了这个问题,如下所述: