Map-reduce Javaプログラムで、マッパーの出力のみを圧縮し、リデューサーの出力は圧縮しないようにしています。これは、Configurationインスタンスで次のプロパティを設定することで可能になると思いますただし、ジョブを実行しても、生成されたファイルはpart-r-00000.gzであるため、レデューサーによって生成された出力はまだ圧縮されています。可能?
//マッパー出力を圧縮します
conf.setBoolean("mapred.output.compress", true);
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString());
conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);
MR2では、今設定する必要があります
conf.set("mapreduce.map.output.compress", true)
conf.set("mapreduce.output.fileoutputformat.compress", false)
詳細については、以下を参照してください。 http://hadoop.Apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
mapred.compress.map.output:マッパーとリデューサー間のデータの圧縮です。 snappyコーデックを使用する場合、これにより、読み取りと書き込みの速度が向上し、ネットワークのオーバーヘッドが減少します。ここで吐き出す心配はありません。これらのファイルはhdfsには保存されません。これらは、マップ縮小ジョブにのみ存在する一時ファイルです。
mapred.map.output.compression.codec:snappyを使用します
mapred.output.compress:このブールフラグは、map/reduceジョブ全体が圧縮データを出力することを定義します。私も常にこれをtrueに設定します。読み取り/書き込み速度が速くなり、ディスクスペースの使用が少なくなります。
mapred.output.compression.type:ブロックを使用します。これにより、すべての圧縮形式(gzip、snappy、bzip2)でも圧縮分割が可能になります。シーケンス、RCFile、Avroなどの分割可能なファイル形式を使用していることを確認してください。
mapred.output.compression.codec:これは、map/reduceジョブの圧縮コーデックです。私は主に次の3つのうちの1つを使用します:Snappy(最速r/w 2x-3x圧縮)、gzip(通常r高速w 5x-8x圧縮)、bzip2(低速r/w 8x-12x圧縮)
また、圧縮がマップされた出力を圧縮するときは、圧縮を分割するため、並べ替え順序によって異なることに注意してください。データが近いほど、圧縮率が高くなります。
「出力圧縮」は、最終出力を圧縮します。マップ出力のみを圧縮するには、次のようなものを使用します。
conf.set("mapred.compress.map.output", "true")
conf.set("mapred.output.compression.type", "BLOCK");
conf.set("mapred.map.output.compression.codec", "org.Apache.hadoop.io.compress.GzipCodec");
MapRのHadoopディストリビューションを使用すると、コーデックを使用してすべてのフォルダーを使用しなくても、圧縮の利点を得ることができます。
MapRは、ファイルシステムレベルでネイティブに圧縮するため、アプリケーションが知る必要も、気にする必要もありません。圧縮はディレクトリレベルでオンまたはオフにできるので、入力は圧縮できますが、出力や好きなものは圧縮できません。一般に、圧縮は非常に高速(デフォルトではsnappyと同様のアルゴリズムを使用)なので、ネイティブ圧縮を使用すると、ほとんどのアプリケーションでパフォーマンスが向上します。ファイルが既に圧縮されている場合、それは非常に迅速に検出され、圧縮は自動的にオフになるので、そこにもペナルティはありません。