压缩集群的输出 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

压缩集群的输出

输出数据压缩

这会压缩 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/