2011-04-12 163 views
16

我是hadoop的新手,并试图处理维基百科转储。这是一个6.7 GB的gzip压缩xml文件。我读过hadoop支持gzip压缩文件,但只能在一个作业上由mapper处理,因为只有一个mapper可以解压缩它。这似乎对处理造成了限制。有其他选择吗?像解压和XML文件分割成多个块,并用gzip重新压缩它们。Hadoop gzip压缩文件

我从http://researchcomputing.blogspot.com/2008/04/hadoop-and-compressed-files.html

感谢您的帮助了解Hadoop的gzip的。

回答

3

由于编解码器的限制,无法以任何方式对GZIP文件进行分区。 6.7GB实际上并不是那么大,所以只需在一台机器上解压缩(这将需要不到一个小时),然后将XML复制到HDFS。然后您可以在Hadoop中处理Wikipedia XML。

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

20

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

有ATLEAST三种方式围绕着限制会:

  1. 作为预处理步骤:解压缩文件,并使用可分开编解码器(LZO)
  2. 作为预处理步骤重新压缩:解压缩文件,分成更小的集合并重新压缩。 (See this
  3. 使用此补丁的Hadoop(这是我写的),可用于解决的办法:Splittable Gzip

HTH

+0

难道我们还需要维护每个拆分XML文件的完整性? – root1982 2012-05-29 14:43:57

+0

是的,这是使用的RecordReader实例的任务。 – 2012-05-29 15:29:46

+0

这是完整文件gzipping的情况,但Hadoop可以使用块gzipping来解决此问题。看泰德的答案。 – jhclark 2016-08-22 16:41:26

8

这是在HDFS最大的小姐认识一个。

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

作为编解码器的GZip可以与RCFiles,序列文件,Arvo文件以及更多文件格式一起使用。当Gzip编解码器在这些可分割格式中使用时,您可以从Gzip和可分离组件中获得很好的压缩和相当好的速度。