Hadoop gzip 压缩文件

Posted

技术标签:

【中文标题】Hadoop gzip 压缩文件【英文标题】:Hadoop gzip compressed files 【发布时间】:2011-04-12 04:00:17 【问题描述】:

我是 hadoop 新手,正在尝试处理***转储。这是一个 6.7 GB gzip 压缩的 xml 文件。我读到 hadoop 支持 gzip 压缩文件,但只能由映射器在单个作业上处理,因为只有一个映射器可以解压缩它。这似乎对处理施加了限制。有替代方案吗?比如将 xml 文件解压并拆分成多个块,然后用 gzip 重新压缩它们。

我从http://researchcomputing.blogspot.com/2008/04/hadoop-and-compressed-files.html读到了有关hadoop gzip的信息

感谢您的帮助。

【问题讨论】:

【参考方案1】:

由于该编解码器的工作方式,使用 GZIP 编解码器压缩的文件无法拆分。 Hadoop中的单个SPLIT只能由单个mapper处理;所以单个 GZIP 文件只能由单个 Mapper 处理。

至少有三种方法可以绕过这个限制:

    作为预处理步骤:解压缩文件并使用可拆分编解码器 (LZO) 重新压缩 作为预处理步骤:解压缩文件,分成较小的集合并重新压缩。 (See this) 将此补丁用于 Hadoop(我编写的),它允许解决此问题:Splittable Gzip

HTH

【讨论】:

我们不是也需要维护每个拆分的xml文件的完整性吗? 是的,这就是使用的 RecordReader 实例的任务。 全文件 gzipping 确实如此,但 Hadoop 可以使用块 gzipping 来解决这个问题。请参阅 Ted 的回答。 @jhclark:最初的问题是关于一个 gzip 压缩的 XML 文件。 Gzipping 块仅在使用组合多个(gzipped)块的不同文件格式时是一种选择。这不是 Hadoop 的特性,而是文件格式的特性。【参考方案2】:

这是对 HDFS 最大的误解之一。

是的,压缩为 gzip 文件的文件不能被 MapReduce 拆分,但这并不意味着 GZip 作为编解码器在 HDFS 中没有价值并且不能拆分。

GZip 作为编解码器可用于 RCFiles、Sequence Files、Arvo Files 和更多文件格式。当在这些可拆分格式中使用 Gzip 编解码器时,您可以从 Gzip 和可拆分组件中获得出色的压缩和相当好的速度。

【讨论】:

【参考方案3】:

由于编解码器的限制,GZIP 文件不能以任何方式进行分区。 6.7GB 真的不算大,所以只需在单机上解压(不到一个小时),然后将 XML 复制到 HDFS 上。然后您可以在 Hadoop 中处理 Wikipedia XML。

Cloud9 包含一个 WikipediaPageInputFormat 类,您可以使用它来读取 Hadoop 中的 XML。

【讨论】:

【参考方案4】:

为什么不解压缩它并改用可拆分 LZ 压缩?m

http://blog.cloudera.com/blog/2009/11/hadoop-at-twitter-part-1-splittable-lzo-compression/

【讨论】:

以上是关于Hadoop gzip 压缩文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥 hadoop 不能拆分一个大文本文件,然后使用 gzip 压缩拆分?

Gzip,BZip2,Lzo,Snappy总结

面试高级技巧之HDFS压缩方式

hadoop 压缩方式对比

Hadoop 压缩页眉和页脚

如何在不使用 map reduce 的情况下使用 lzo 压缩写入 hadoop hdfs