我正在设置 lzo 编解码器以用作我的 hadoop 作业中的压缩工具。我知道 lzo 具有创建可拆分文件的理想功能。但我还没有找到一种方法让 lzo 自动创建可分割文件。到目前为止我读过的博客都提到在作业之外使用索引器并将输出 lzo 文件作为 mapreduce 作业的输入。
我正在使用一些hadoop基准测试,我不想更改基准测试代码,只是在hadoop中使用lzo压缩来查看其对基准测试的影响。我计划使用 lzo 作为压缩 map 输出的编解码器,但如果输出不可分割,下一阶段将必须在节点中获取整个压缩输出才能工作。
是否有任何 hadoop 配置选项可以指示 lzo 使输出文件可拆分,从而透明地完成?
最佳答案
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 也支持。
关于hadoop:lzo 压缩的自动可分割输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16805326/