java.io.IOException:无效的int编码

时间:2014-02-13 18:48:35

标签: hadoop avro

我正在编写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>

任何帮助都会非常感激吗?感谢

1 个答案:

答案 0 :(得分:0)

就我而言,此问题很明显,因为我没有使用正确的架构来阅读文档。

请记住,如果您正在读取的Avro文档是使用与您所阅读的模式不同的模式(书写器模式)编写的,则需要使用同时具有阅读器和书写器模式的构造函数来构造SpecificDatumReader。

new SpecificDatumReader<>(writerSchema, readerSchema)

代替

new SpecificDatumReader<>(class)