Hadoop gzip压缩文件

19
我是新手,正在尝试处理维基百科转储。这是一个6.7GB的gzip压缩XML文件。我了解到Hadoop支持gzip压缩文件,但只能在单个作业中由mapper处理,因为只有一个mapper可以对其进行解压缩。这似乎对处理造成了限制。是否有其他选择?例如,将XML文件解压缩并拆分为多个块,然后再用gzip重新压缩它们。
我从http://researchcomputing.blogspot.com/2008/04/hadoop-and-compressed-files.html了解有关Hadoop gzip的信息。
感谢您的帮助。
5个回答

22

由于GZIP编解码器的工作方式,使用该编解码器压缩的文件无法分割。

Hadoop中的一个SPLIT只能由一个Mapper处理;因此,一个单独的GZIP文件只能由一个Mapper处理。

以下至少有三种方法可以避开这个限制:

  1. 作为预处理步骤:解压文件并使用可分割编解码器(LZO)重新压缩
  2. 作为预处理步骤:先解压文件,再将其拆分成较小的集合并重新压缩。(请参见此处
  3. 使用我编写的Hadoop补丁程序,它可以绕过此限制:Splittable Gzip

希望对你有所帮助。


我们难道不需要为每个拆分的XML文件维护其完整性吗? - root1982
是的,这就是使用RecordReader实例的任务。 - Niels Basjes
这适用于完整文件的Gzip压缩,但是Hadoop可以使用块Gzip压缩来解决这个问题。请参见Ted的答案。 - jhclark
@jhclark:原始问题是关于一个gzipped XML文件的。当使用不同的文件格式组合多个(gzipped)块时,Gzipping块只是一种选择。这不是Hadoop的特性,而是文件格式的特性。 - Niels Basjes

10

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

是的,使用gzip格式压缩的文件不可被MapReduce分片处理,但这并不意味着GZip作为编解码器在HDFS中没有价值,也不能被分片。

GZip作为编解码器可以和RCFiles、Sequence Files、Arvo Files等许多文件格式一起使用。当在可分片的文件格式中使用Gzip编解码器时,您将获得来自GZip的高压缩比和相对较快的速度以及可分段组件。


3

GZIP文件由于编解码器的限制无法进行任何形式的分区。6.7GB并不是很大,所以只需在一台机器上解压缩它(这将花费不到一个小时),然后将XML复制到HDFS中。然后您就可以在Hadoop中处理维基百科XML。

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


0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接