

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 壓縮 Amazon EMR 叢集輸出的方法
<a name="emr-plan-output-compression"></a>

壓縮來自資料處理的輸出有不同的方法。您使用的壓縮工具取決於資料的屬性。當您傳輸大量資料時，壓縮可以改善效能。

## 輸出資料壓縮
<a name="HadoopOutputDataCompression"></a>

 此會壓縮 Hadoop 任務的輸出。若您使用的是 TextOutputFormat，輸出成果便是 gzip 壓縮的文字檔。若正在寫入 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>

 若您的任務會從映射器將大量資料隨機播放到縮減器，啟用中繼資料壓縮可大幅改善效能。可壓縮映射輸出，在資料抵達核心節點時再解壓縮。組態設定為 mapred.compress.map.output。啟用方式與輸出壓縮類似。

 若寫入的是自訂的 Jar，請使用以下命令：

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

## 將 Snappy 程式庫與 Amazon EMR 搭配使用
<a name="emr-using-snappy"></a>

Snappy 是針對速度最佳化處理的壓縮與解壓縮程式庫。Amazon EMR AMI 2.0 版及更新版本均有提供，且是中繼壓縮的預設方式。如需 Snappy 的詳細資訊，請至 [http://code.google.com/p/snappy/](http://code.google.com/p/snappy/)。