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

ven*_*ata 7 hadoop avro

我正在编写mapReduce Job来读取和处理Avrofile.输入文件是Avro输出格式是Avro

当我执行Mapreduce Job时,我在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.
Run Code Online (Sandbox Code Playgroud)

谷歌搜索时,我注意到有一张阿帕奇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>
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激?.谢谢

pan*_*dmz 0

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

请记住,如果您正在读取的 Avro 文档的架构(写入器架构)与您正在读取的架构不同,则需要使用同时采用读取器和写入器架构的构造函数来构造 SpecificDatumReader。

new SpecificDatumReader<>(writerSchema, readerSchema)
Run Code Online (Sandbox Code Playgroud)

代替

new SpecificDatumReader<>(class)
Run Code Online (Sandbox Code Playgroud)