2

我正在设置 lzo 编解码器以用作我的 hadoop 作业中的压缩工具。我知道 lzo 具有创建可拆分文件的理想功能。但我还没有找到让 lzo 自动创建可拆分文件的方法。到目前为止,我阅读的博客都提到在作业之外使用索引器并将输出 lzo 文件作为 mapreduce 作业的输入。

我正在使用一些我不想更改基准代码的 hadoop 基准,只需在 hadoop 中使用 lzo 压缩来查看它对基准的影响。我打算使用 lzo 作为编解码器来压缩地图输出,但如果输出不可拆分,下一阶段将必须让节点中的整个压缩输出能够工作。

是否有任何 hadoop 配置选项来指示 lzo 使输出文件可拆分,从而透明地完成?

4

2 回答 2

3

BZIP2 在 hadoop 中是可拆分的——它提供了非常好的压缩比,但从 CPU 时间和性能来看并没有提供最佳结果,因为压缩非常消耗 CPU。

LZO 在 hadoop 中是可拆分的——利用 hadoop-lzo 你有可拆分的压缩 LZO 文件。您需要有外部 .lzo.index 文件才能并行处理。该库提供了以本地或分布式方式生成这些索引的所有方法。

LZ4 在 hadoop 中是可拆分的——利用 hadoop-4mc 你有可拆分的压缩 4mc 文件。您不需要任何外部索引,您可以使用提供的命令行工具或通过 Java/C 代码在 hadoop 内部/外部生成档案。4mc 可以在任何级别的速度/压缩比下在 hadoop LZ4 上使用:从达到 500 MB/s 压缩速度的快速模式到提供更高压缩比的高/超模式,几乎可以与 GZIP 相媲美。

ZSTD 是更好的压缩,hadoop-4mc 也支持。

于 2016-09-16T07:16:38.860 回答
0

该项目赋予 LZO 可拆分性 - https://github.com/toddlipcon/hadoop-lzo LZO 不是自然可拆分的。如果您使用的是 Cloudera,这里有一篇文章如何安装正确的 LZO - http://www.cloudera.com/content/cloudera/en/documentation/core/v5-2-x/topics/cm_ig_install_gpl_extras.html 不是由于某些许可证问题,默认安装。

更新 5/2:与 Cloudera 有相同问题的票。他们告诉我它不透明,必须编入索引。所以它改变了我上面的回答。

您可以查看https://github.com/carlomedas/4mc - 根据描述,它似乎很有希望。不过还没用过。它应该可以透明地拆分。

于 2015-04-19T05:58:31.783 回答