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 压缩文件的主要内容,如果未能解决你的问题,请参考以下文章