web-dev-qa-db-ja.com

Hadoop、マッパー出力を圧縮する方法、レデューサー出力は圧縮しない方法

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);
25
Marcin

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

21
fengyun

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圧縮)

また、圧縮がマップされた出力を圧縮するときは、圧縮を分割するため、並べ替え順序によって異なることに注意してください。データが近いほど、圧縮率が高くなります。

54
ted.malaska

「出力圧縮」は、最終出力を圧縮します。マップ出力のみを圧縮するには、次のようなものを使用します。

  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"); 
12
vpk
  1. 「mapred.compress.map.output」をtrueに設定する必要があります。
  2. オプションで、「mapred.map.output.compression.codec」を設定して圧縮コーデックを選択できます。注1:mapred出力圧縮はBLOCKであってはなりません。詳細については、次のJIRAを参照してください。 https://issues.Apache.org/jira/browse/HADOOP-1194 注2:GZIPとBZ2はCPUを集中的に使用します。ネットワークが低速で、GZIPまたはBZ2の方が圧縮率が高い場合は、CPUサイクルの消費を正当化できる可能性があります。それ以外の場合は、LZOまたはSnappyコーデックを検討してください。
    注3:マップ出力圧縮を使用する場合は、JNIを介して呼び出され、パフォーマンスが向上するネイティブコーデックをインストールすることを検討してください。
2
root1982

MapRのHadoopディストリビューションを使用すると、コーデックを使用してすべてのフォルダーを使用しなくても、圧縮の利点を得ることができます。

MapRは、ファイルシステムレベルでネイティブに圧縮するため、アプリケーションが知る必要も、気にする必要もありません。圧縮はディレクトリレベルでオンまたはオフにできるので、入力は圧縮できますが、出力や好きなものは圧縮できません。一般に、圧縮は非常に高速(デフォルトではsnappyと同様のアルゴリズムを使用)なので、ネイティブ圧縮を使用すると、ほとんどのアプリケーションでパフォーマンスが向上します。ファイルが既に圧縮されている場合、それは非常に迅速に検出され、圧縮は自動的にオフになるので、そこにもペナルティはありません。

1
Ted Dunning