两个连接的bz2文件和一个由两个连接文件组成的bz2文件有什么区别?

时间:2013-02-06 01:20:00

标签: hadoop compression bzip2

如果我有两个文本文件,一个两个,有什么区别:

  

bz2 one two -c> out.bz2

...和...

  猫一二| bzip2 -c> out.bz2

具体来说,我正在使用pbzip2生成bz2文件,将它们放在HDFS上,然后从猪中读取它们,我正在点击MAPREDUCE-477。我无法从版本0.20升级我的hadoop集群,使用非并行bz2实现太慢了,我想使用非块压缩算法。

有什么方法可以将连接的bz2文件转换为非连续的bz2文件?或者甚至,我如何修改pbzip2以便生成非连接的bz2文件?

谢谢 -

1 个答案:

答案 0 :(得分:1)

通常通过用更短的东西替换模式来进行压缩。例如,如果你有“Hello there,再见那里”那么你可以用第一个引用替换第二个“there”(引用小于原来的5个字节)。

现在想象一下,如果你有2个文件,一个包含“Hello there”,另一个包含“Goodbye there”。如果你连接然后压缩,那么压缩有更多的数据可以使用,并可以用第一个引用替换第二个“那里”。如果你单独压缩两个文件,然后连接,则不会发生这种情况。

现在想象一下,如果你连接然后压缩,那么第二个“那里”(来自第二个文件)被替换为对第一个“那里”(来自第一个文件)的引用;然后尝试将压缩数据拆分为2个压缩文件。你最终得到的是一个2个文件,其中第二个文件引用了该文件中不存在的东西,无法解压缩。

注意:现代压缩技术比我上面描述的要复杂得多 - 我过于简单化了很多东西来说明。

如果需要并行压缩和解压缩大量数据,则无法完成。相反,你需要将大量数据分成小块;因此,小块可以单独压缩/解压缩,许多小块可以并行压缩/解压缩。