1

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

bz2 一二 -c >out.bz2

...和...

猫一二 | bzip2 -c >out.bz2

?

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

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

谢谢 -

4

1 回答 1

1

压缩通常通过用更短的东西替换模式来工作。例如,如果您有“Hello there, goodbye there”,那么您可以将第二个“there”替换为对第一个的引用(其中引用小于原始的 5 个字节)。

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

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

注意:现代压缩技术比我上面描述的要复杂得多——我为了说明而过度简化了很多。

如果需要并行压缩和解压大量数据,那是做不到的。相反,您需要将大量数据分成小块;这样小块可以单独压缩/解压缩,许多小块可以并行压缩/解压缩。

于 2013-02-06T01:37:07.093 回答