クラスターの出力を圧縮する
出力データ圧縮
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"
最後に、Custom Jar を作成している場合は、ジョブの作成時に次の行を使用して出力圧縮を有効にすることができます。
FileOutputFormat.setCompressOutput(conf, true);
中間データ圧縮
マッパーからリデューサーに大量のデータを移動するジョブでは、中間圧縮を行うことでパフォーマンスが大幅に向上することがあります。マップ出力を圧縮し、コアノードに到達したらそれを解凍します。設定は、mapred.compress.map.output で行います。これは、出力圧縮についても同様に有効にすることができます。
Custom Jar を作成している場合は、次のコマンドを使用します。
conf.setCompressMapOutput(true);
Amazon EMR での Snappy ライブラリの使用
Snappy は高速圧縮/解凍ライブラリです。Amazon EMR AMI バージョン 2.0 以降で使用でき、中間圧縮用のデフォルトとして使用されています。Snappy の詳細については、http://code.google.com/p/snappy/