我正在编写mapReduce Job来读取和处理Avrofile。 输入文件是Avro 输出格式为Avro
当我执行Mapreduce作业时,我在reducer阶段遇到以下异常。当reducer抛出IOException时,我无法在reducer中捕获并消除它。 Hue中的错误堆栈跟踪看起来
java.io.IOException: Invalid int encoding
at org.apache.avro.io.DirectBinaryDecoder.readInt(DirectBinaryDecoder.java:113)
at org.apache.avro.io.ValidatingDecoder.readInt(ValidatingDecoder.java:83)
at org.apache.avro.reflect.ReflectDatumReader.readInt(ReflectDatumReader.java:166)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:156)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:177)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:148)
at org.apache.avro.generic.GenericDatumReader.readArray(GenericDatumReader.java:206)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:150)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:177)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:148)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:139)
at org.apache.avro.hadoop.io.AvroDeserializer.deserialize(AvroDeserializer.
谷歌搜索时,我注意到有一张阿帕奇JIRA票(https://issues.apache.org/jira/browse/AVRO-882)。没有更新。
我正在使用AVRO-1.7.5,以下是依赖maven
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.7.5</version>
</dependency>
任何帮助都会非常感激吗?感谢
答案 0 :(得分:0)
就我而言,此问题很明显,因为我没有使用正确的架构来阅读文档。
请记住,如果您正在读取的Avro文档是使用与您所阅读的模式不同的模式(书写器模式)编写的,则需要使用同时具有阅读器和书写器模式的构造函数来构造SpecificDatumReader。
new SpecificDatumReader<>(writerSchema, readerSchema)
代替
new SpecificDatumReader<>(class)