压缩 Amazon EMR 集群输出的方法 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

压缩 Amazon EMR 集群输出的方法

有多种方法可以压缩数据处理产生的输出。使用的压缩工具取决于数据的属性。在传输大量数据时,压缩可以提高性能。

输出数据压缩

这会压缩 Hadoop 作业的输出。如果你使用 TextOutputFormat 的是压缩后的文本文件。如果您要写入, 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 2.0 及更高 AMIs 版本中可用,并被用作中间压缩的默认设置。有关 Snappy 库的详细信息,请转到 http://code.google.com/p/snappy/