hadoop - 两个串联的 bz2 文件和一个由两个串联文件组成的 bz2 文件有什么区别?

标签 hadoop compression bzip2

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

bz2 one two -c >out.bz2

...和...

cat one two | bzip2 -c >out.bz2

?

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

有什么方法可以将串联的 bz2 文件转换为非串联的文件?或者,我该如何修改 pbzip2 以便它生成非串联的 bz2 文件?

谢谢-

最佳答案

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

现在假设您有 2 个文件,一个包含“Hello there”,另一个包含“Goodbye there”。如果先连接再压缩,则压缩会处理更多数据,并且可以将第二个“那里”替换为对第一个的引用。如果您分别压缩这两个文件然后将其连接起来,则不会发生这种情况。

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

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

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

关于hadoop - 两个串联的 bz2 文件和一个由两个串联文件组成的 bz2 文件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14720004/

相关文章:

c - (C) 如何为 z827 ASCII 压缩修正这个算法?

algorithm - 为什么我们不使用简单的二进制值来压缩数据

node.js - 使用 Node.js 提取 .bz2 管道?

compression - mysqldump 压缩 - gzip 或 bzip2

java - 使用多线程 TransferFromLocal 到 hadoop hdfs

hadoop - 如何在oozie工作流程中检查分区数据集?

java - MapDB、序列化器和压缩

hadoop - 解压时如何读取压缩文件?

hadoop - hadoop中的Jobtracker无法运行

hadoop - 如何自动配置 Cloudera Manager?