【问题标题】:EOFException while loading avro schema加载 avro 架构时出现 EOFException
【发布时间】: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


【解决方案1】:

你可以确定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"));

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-17
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多