2

我听说我们可以使用多个映射器在 Hadoop 中并行读取一个 bzip2 文件的不同部分,以提高性能。但我搜索后找不到相关样本。感谢是否有人能指出我相关的代码片段。谢谢。

顺便说一句:gzip 是否具有相同的功能(多个映射器并行处理一个 gzip 文件的不同部分)。

4

2 回答 2

4

如果您查看:http ://comments.gmane.org/gmane.comp.jakarta.lucene.hadoop.user/30662 ,您会发现 bzip2 格式确实是可拆分的,并且多个映射器可以在一个文件上工作。补丁提交于:https ://issues.apache.org/jira/browse/HADOOP-4012 。但是,它似乎仅在 HADOOP 0.21.0 以上可用。

从个人经验来看,为了使用这种 bzip2 技术,您无需做任何不同的事情。hadoop 应该根据您的最小拆分大小自动选择它。

bzip2 按块压缩数据,因此可以按块解压缩并将每个块发送到单独的映射器。但是,gzip 没有这种技术,因此不能将其发送到不同的映射器。

于 2012-12-26T12:15:13.770 回答
2

您可以查看pbzip2以获取并行 bz2 压缩和解压缩的示例。

还有一个并行的 gzip,pigz。它进行并行压缩,但不进行并行解压缩。deflate 格式不适合并行解压缩。但是,您可以 a) 准备一个带有历史重置的特殊 gzip 流,或者 b) 您可以在第一遍时将索引构建到 gzip 文件中。无论哪种方式,您都可以并行读取不同的部分,或者进行更有效的随机访问。

于 2012-12-26T07:07:24.300 回答