【问题标题】:PIG UDF load .gz file failedPIG UDF 加载 .gz 文件失败
【发布时间】:2012-12-20 20:17:18
【问题描述】:

我编写了我的 UDF 来将文件加载到 Pig 中。它适用于加载文本文件,但是,现在我还需要能够读取.gz 文件。我知道我可以解压缩文件然后处理,但我只想阅读.gz 文件而不解压缩它。

我的 UDF 从LoadFunc 扩展,然后在我的成本输入文件MyInputFile extends TextInputFormat 中。我还实现了MyRecordReader。只是想知道扩展TextInputFormat 是否有问题?我试过FileInputFormat,仍然无法读取文件。之前有人写过UDF从.gz文件中读取数据吗?

【问题讨论】:

  • TextInputFormat 可以处理 gzip 文件。看看它的 RecordReader 的 (LineRecordReader) initialize() 方法,其中初始化了正确的 CompressionCodec。另请注意,gzip 文件不可拆分。
  • 感谢您指出这一点。如果它不可拆分,那么我想我会考虑先解压缩它。如果您能指出一些预解压缩文件然后加载到 PIG 的最佳实践,将不胜感激。比如最好的方法是什么?谢谢。
  • 在不知道数据大小的情况下,最简单的方法是将数据未压缩存储在 hdfs 上。您也可以使用可拆分格式 (LZO) 重新打包它。如何提取 gzip 文件;本地磁盘->HDFS,见:bigdatanoob.blogspot.hu/2011/07/…。如果已经在 hdfs 上:hadoop fs -cat /data/data.gz | gzip -d | hadoop fs -put - /data/data.txt
  • 从 S3 怎么样?和它已经在 HDFS 上一样吗?只是想知道你能把你的评论作为答案吗?所以我可以接受你的回答:)

标签: map hadoop gzip user-defined-functions apache-pig


【解决方案1】:

TextInputFormat 也处理 gzip 文件。看看它的 RecordReader 的 (LineRecordReader) initialize() 方法,其中初始化了正确的 CompressionCodec。另请注意,gzip 文件不可拆分(即使它们位于 S3 上),因此您可能需要使用可拆分格式(例如:LZO)或未压缩数据来利用所需级别的并行处理。

如果您的 gzip 压缩数据存储在本地,您可以按照here 的描述一步将其解压缩并复制到 hdfs。或者如果它已经在 hdfs
hadoop fs -cat /data/data.gz | gzip -d | hadoop fs -put - /data/data.txt 会更方便。

【讨论】:

  • 顺便说一句,如果在 HDFS 中并想从 S3 读取 .gz 文件并保存到 HDFS 中,则运行 hadoop fs -cat s3n://yourbuckets/yourfile.gz | gzip -d > yourfile.txt
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 2013-05-31
  • 2011-10-25
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多