

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

# 压缩 Amazon EMR 集群输出的方法
<a name="emr-plan-output-compression"></a>

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

## 输出数据压缩
<a name="HadoopOutputDataCompression"></a>

 这会压缩 Hadoop 作业的输出。如果你使用 TextOutputFormat 的是压缩后的文本文件。如果您要写入， SequenceFiles 则结果是内部压缩 SequenceFile 的。将配置设置 mapred.output.compress 设置为 True，可启用该功能。

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

```
1. -jobconf mapred.output.compress=true
```

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

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

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

```
1. FileOutputFormat.setCompressOutput(conf, true);
```

## 中间数据压缩
<a name="HadoopIntermediateDataCompression"></a>

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

 当写入自定义 JAR 时，使用下列命令：

```
1. conf.setCompressMapOutput(true);
```

## 在 Amazon EMR 中使用 Snappy 库
<a name="emr-using-snappy"></a>

Snappy 是一种压缩和解压缩库，已为提高速度而进行了优化。它在 Amazon EMR 2.0 及更高 AMIs 版本中可用，并被用作中间压缩的默认设置。有关 Snappy 库的详细信息，请转到 [http://code.google.com/p/snappy/](http://code.google.com/p/snappy/)。