我正在研究一些MapR程序。它们通常在我本地机器上的Apache hadoop上进行编码和测试, 和打包的jar(具有依赖性)上载到运行Cloudera CDH4(v4.4.1)的群集中。对于这两种情况,我有不同的pom.xml文件来制作包。Cloudera CDH4如何与Avro一起使用?
现在我正在使用Apache Avro来序列化数据,并且涉及当前的稳定版本1.7.5。 在本地模式,我有的Avro-mapred的pom.xml依赖
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-mapred</artifactId>
<version>1.7.5</version>
</dependency>
和它运作良好,在Apache Hadoop的。
在群集模式,对于pom.xml的依赖性, 一个分类标签由CDH4 doc所建议所附:
<classifier>hadoop1</classifier>
但既不hadoop1或hadoop2,会出现误差。 对于hadoop1标签:
Error running child : java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
at org.apache.avro.mapreduce.AvroKeyOutputFormat.getRecordWriter(AvroKeyOutputFormat.java:87)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:597)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
对于hadoop2标签,
Error running child : java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
at org.apache.avro.mapreduce.AvroKeyRecordWriter.<init>(AvroKeyRecordWriter.java:53)
at org.apache.avro.mapreduce.AvroKeyOutputFormat$RecordWriterFactory.create(AvroKeyOutputFormat.java:78)
at org.apache.avro.mapreduce.AvroKeyOutputFormat.getRecordWriter(AvroKeyOutputFormat.java:104)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:597)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
我在MapR1使用新的MapReduce接口编程。 我也猜测它与已安装的avro版本有冲突,并会进一步与我们的集群管理员 联系。 任何想法,家伙?
贾敏
嗨肖恩,它尚未解决。我实际上使用新的mapreduce API编译MR1,我们的CDH 4.4.1也配置了MR1。我有一些其他程序没有在群集上成功运行avro。因为默认情况下avro未随CDH管理器一起发货,所以稍后将手动安装。也许我需要一些故障排除这个安装进度.. – caesar0301
它看起来像问题是Avro。 Avro是一个图书馆,因此在Cloudera Manager中本身没有地方。它是Hadoop的一部分,因此是CDH的一部分。我刚刚意识到你说Avro 1.7.5;当从1.7.4更新到1.7.5时,我记得有些问题阻止了我的更新,但我不认为是这样。我建议你直接匹配版本是CDH/Hadoop,我认为它是1.7.4。这个错误显示了Avro是为Hadoop 1而构建的,但遇到了Hadoop 2. –
它是我尝试使用最新版本的开始。我会尝试你的建议,并对这两个版本进行匹配。 – caesar0301