压缩集群的输出 - Amazon EMR

压缩集群的输出

输出数据压缩

这会压缩 Hadoop 作业的输出。如果您使用的是 TextOutputFormat,返回结果是 gzip 处理后的文本文件。如果您向 SequenceFiles 写入,那么,返回结果是内部压缩的 SequenceFile。将配置设置 mapred.output.compress 设置为 True,可启用该功能。

如果您运行的是流式作业,则可以将这些参数传递给流式作业的方式启用该功能。

-jobconf mapred.output.compress=true

您还可以使用引导操作,自动压缩所有的作业输出。此处介绍如何使用 Ruby 客户端做到这点。

--bootstrap-actions s3://elasticmapreduce/bootstrap-actions/configure-hadoop \ --args "-s,mapred.output.compress=true"

最后,如果写入自定义 JAR,可以在创建作业时使用以下行启用输出压缩。

FileOutputFormat.setCompressOutput(conf, true);

中间数据压缩

如果您的作业有海量的数据在映射器会 Reducer 之间来回发送,那么启用中间压缩可以提高性能。压缩映射输出,并在其到达核心节点时进行解压缩。配置设置是 mapred.compress.map.output。您同样可以对输出压缩启用这个功能。

当写入自定义 JAR 时,使用下列命令:

conf.setCompressMapOutput(true);

在 Amazon EMR 中使用 Snappy 库

Snappy 是一种压缩和解压缩库,已为提高速度而进行了优化。它在 Amazon EMR AMI 版本 2.0 实例和更高版本中提供,用作中间压缩的默认值。有关 Snappy 库的详细信息,请转到 http://code.google.com/p/snappy/