使用 piggybank 和 AvroStorage 解决 EMR 问题

Posted

技术标签:

【中文标题】使用 piggybank 和 AvroStorage 解决 EMR 问题【英文标题】:Pig on EMR trouble with piggybank and AvroStorage 【发布时间】:2012-09-20 22:39:17 【问题描述】:

我正在 EMR 上运行一个 pig 脚本,该脚本读取以 Avro 格式存储的数据。它一直在本地运行,但为了让脚本的其他部分在 EMR 上运行,我不得不将我使用的 piggybank.jar 恢复为 0.9.2 而不是 0.10.0。进行该更改后,AvroStorage 静默读取任何数据失败,仅返回零记录。日志中没有提到任何内容。这是脚本:

REGISTER ../../../lib/avro-1.7.0.jar                                                                    
REGISTER ../../../lib/json-simple-1.1.1.jar                                                             
REGISTER ../../../lib/jackson-core-asl-1.5.2.jar                                                        
REGISTER ../../../lib/jackson-mapper-asl-1.5.2.jar                                                      
REGISTER ../../../lib/piggybank.jar                                                                     
a = LOAD '/data/' USING org.apache.pig.piggybank.storage.avro.AvroStorage();
DUMP a;

再一次,如果 piggybank.jar 是 0.10.0 版,它可以工作。如果是 0.9.2 版,则不是。我应该使用任何其他库的不同版本吗?我用avro-1.5.3.jar试过了,也没用。

另一个注意事项:如果我这样做 describe a; 它会正确输出架构。

【问题讨论】:

【参考方案1】:

您可能已经考虑过这一点 - 但如果您将猪脚本中依赖于 0.9.2 的部分更改为在 0.1.0 上运行,可能会更快。

【讨论】:

【参考方案2】:

不确定这对您来说是否仍然是个问题,但我使用的一组寄存器是:

注册 s3://..path../lib/piggybank-0.10.0.jar; 注册文件:/home/hadoop/lib/pig/piggybank.jar; 注册 s3://..path../lib/avro-1.7.1.jar; 注册 s3://..path../lib/jackson-core-2.0.6.jar; 注册 s3://..path../lib/jackson-mapper-lgpl-1.9.9.jar; 注册 s3://..path../lib/json-simple-1.1.1.jar; 注册 s3://..path../lib/joda-time-2.1.jar; 注册 s3://..path../lib/snappy-java-1.0.4.1.jar

您可以将两个储钱罐堆叠在一起。 piggybank-0.10.0 jar 与 piggybank jar 的播放方式有些奇怪 - 它似乎对顺序敏感,但希望这会有所帮助,或者至少可以为您提供其他尝试。

【讨论】:

以上是关于使用 piggybank 和 AvroStorage 解决 EMR 问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Piggybank 使用 Pig 进行 XML 解析

无法构建 piggybank -> /home/build/ivy/lib 不存在

由于 piggybank.jar 的问题,AWS 自己的提交 Pig 作业的示例不起作用

无法在猪中处理 Xml

如何使用储钱罐删除标题?

pig 未知方法getNewApplication错误