1

我有一堆未压缩的 protobuf 二进制日志文件 (*.binlog)。除了未压缩之外,每个文件/流还包含可变数量的消息。

我正在尝试将这些文件加载​​到 HDFS 并使用 Pig 查询它们。

我的问题是:

是否可以使用 Elephant-Bird 读取未压缩的文件?我也尝试过读取 bzip2 编码的文件,但到目前为止我的尝试给了我Failed to read from file错误

我正在努力

register '/all-libraries/*.jar';
raw_data = load 'file.binlog' using com.twitter.elephantbird.pig.load.ProtobufPigLoader('my_package.My_proto_Class');

加载函数返回没有错误但是当我说

value = foreach raw_data generate field1; //doesn't throw error
dump value //throws error

猪堆栈跟踪

ERROR 1066:无法打开别名值的迭代器

org.apache.pig.impl.logicalLayer.FrontendException: 错误 1066: 无法在 org.apache.pig.PigServer.openIterator(PigServer.java:892) 在 org.apache.pig.tools.grunt 打开别名 person_phone_numbers 的迭代器。 GruntParser.processDump(GruntParser.java:774) 在 org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:372) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser. java:198) 在 org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:173) 在 org.apache .pig.Main.run(Main.java:541) 在 org.apache.pig.Main.main(Main.java:156) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) 在 sun.reflect。DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache .hadoop.util.RunJar.main(RunJar.java:136) 原因:java.io.IOException:作业在 org.apache.pig.PigServer.openIterator(PigServer.java:884) 处以异常状态 FAILED 终止 ...还有 13 个

不,如果这可能的话,有人会给出提示吗?如何ProtobufPigLoader在阅读消息之前直接阅读消息长度?

4

0 回答 0