加载avro架构时出现EOFException

时间:2014-06-03 10:30:48

标签: java maven hadoop mapreduce avro

我正在尝试使用maven加载avro架构文件。我已经在我的类路径中保存了avsc文件但是在运行它时我得到了EOFEception。我知道问题在于无法找到模式文件,因为当我在代码中编写模式时,它运行得很好。我需要一些帮助。谢谢。

这是跟踪:

    [root@dev MapReduce]# hadoop jar target/MapReduce-0.0.1-SNAPSHOT.jar com.hadoop.bi.MapReduce.AvroScTest StringPair.avsc
Exception in thread "main" java.io.EOFException: No content to map to Object due to end of input
    at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2444)
    at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2377)
    at org.codehaus.jackson.map.ObjectMapper.readTree(ObjectMapper.java:1234)
    at org.codehaus.jackson.map.ObjectMapper.readTree(ObjectMapper.java:1209)
    at org.apache.avro.Schema$Parser.parse(Schema.java:931)
    at org.apache.avro.Schema$Parser.parse(Schema.java:914)
    at com.hadoop.bi.MapReduce.AvroScTest.main(AvroScTest.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:208)

以下是我尝试加载架构的代码:

Schema.Parser parser = new Schema.Parser();
Schema schema =parser.parse(AvroScTest.class.getResourceAsStream(args[0]));

这是项目的结构:

MapReduce
    src
      main
      test
    target
      classes
      MapReduce-0.0.1-SNAPSHOT.jar
    pom.xml
    StringPair.avsc

架构内容:

{
"type": "record",
"name": "StringPair",
"doc": "A pair of strings.",
"fields": [
{"name": "left", "type": "string"},
{"name": "right", "type": "string"}
]
}

1 个答案:

答案 0 :(得分:0)

您可以通过

确定StringPair.avsc文件在您的jar中
mvn tf MapReduce-0.0.1-SNAPSHOT.jar

(如果未列出maven,只要将其置于jar中,如果将其放在src/main/resources/StringPair.avsc下)

对于“由于输入结束而没有要映射到对象的内容”错误消息,我可以在文件名之前放置一个斜杠,因为它位于jar的根目录中。

Schema.Parser parser = new Schema.Parser();
Schema schema =parser.parse(AvroScTest.class.getResourceAsStream("/StringPair.avsc"));