【问题标题】:What's the difference between two concatentated bz2 files and one bz2 file made from two concatenated files?两个连接的 bz2 文件和一个由两个连接的文件组成的 bz2 文件有什么区别?
【发布时间】:2013-02-06 01:19:59
【问题描述】:

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

bz2 一二 -c >out.bz2

...和...

猫一二 | bzip2 -c >out.bz2

?

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

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

谢谢-

【问题讨论】:

    标签: hadoop compression bzip2


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 可以,但是bz2是块压缩算法,块之间不应该有依赖关系吧?他们可能有不同的字典,但我不确定这如何导致某些应用程序(例如 MAPREDUCE-477)只读取第一个文件的块?
    • 如果一个块是1000字节,第一个文件是1300字节,第二个文件是1700字节;然后猜测当文件被连接然后压缩时中间的那个块将包含什么..
    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 2022-01-27
    • 1970-01-01
    • 2011-10-14
    • 2012-03-07
    • 2022-11-17
    相关资源
    最近更新 更多