【发布时间】:2014-06-03 10:30:47
【问题描述】:
我正在尝试使用 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"}
]
}
【问题讨论】:
-
从堆栈跟踪中我看到 json 解析失败,您能否发布您的“StringPair.avsc”文件?它的位置是否正确?
-
架构看起来正确,您可以在将其提供给您的工作时尝试指定完整的文件路径吗?
-
抱歉,我不知道是什么问题,但我会在您的代码中打印出来:
new File(args[0]).isFile()。这将有助于缩小问题范围 -
感谢@RomanI,但我对此进行了测试,这不是问题,因为它通过了测试。
标签: java maven hadoop mapreduce avro