如果我有两个文本文件,一个和两个,有什么区别:
bz2 one two -c> out.bz2
...和...
猫一二| bzip2 -c> out.bz2
具体来说,我正在使用pbzip2生成bz2文件,将它们放在HDFS上,然后从猪中读取它们,我正在点击MAPREDUCE-477。我无法从版本0.20升级我的hadoop集群,使用非并行bz2实现太慢了,我想使用非块压缩算法。
有什么方法可以将连接的bz2文件转换为非连续的bz2文件?或者甚至,我如何修改pbzip2以便生成非连接的bz2文件?
谢谢 -
答案 0 :(得分:1)
通常通过用更短的东西替换模式来进行压缩。例如,如果你有“Hello there,再见那里”那么你可以用第一个引用替换第二个“there”(引用小于原来的5个字节)。
现在想象一下,如果你有2个文件,一个包含“Hello there”,另一个包含“Goodbye there”。如果你连接然后压缩,那么压缩有更多的数据可以使用,并可以用第一个引用替换第二个“那里”。如果你单独压缩两个文件,然后连接,则不会发生这种情况。
现在想象一下,如果你连接然后压缩,那么第二个“那里”(来自第二个文件)被替换为对第一个“那里”(来自第一个文件)的引用;然后尝试将压缩数据拆分为2个压缩文件。你最终得到的是一个2个文件,其中第二个文件引用了该文件中不存在的东西,无法解压缩。
注意:现代压缩技术比我上面描述的要复杂得多 - 我过于简单化了很多东西来说明。
如果需要并行压缩和解压缩大量数据,则无法完成。相反,你需要将大量数据分成小块;因此,小块可以单独压缩/解压缩,许多小块可以并行压缩/解压缩。