25

私はmap-reducejavaプログラムを持っています。このプログラムでは、マッパー出力のみを圧縮しようとし、レデューサー出力は圧縮しません。これは、以下のように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);
4

5 に答える 5

55

mapred.compress.map.output:マッパーとレデューサーの間のデータの圧縮です。スナッピーコーデックを使用する場合、これにより読み取り/書き込み速度が向上し、ネットワークオーバーヘッドが減少する可能性があります。ここで唾を吐く心配はありません。これらのファイルは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圧縮)

また、圧縮が出力をマップする場合は、分割のために圧縮が並べ替え順序に基づいて異なることを覚えておいてください。近いデータは一緒にすると、圧縮率が高くなります。

于 2012-07-05T01:11:35.200 に答える
21

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を参照してください。

于 2014-03-14T03:03:49.683 に答える
12

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

  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"); 
于 2011-04-07T10:55:26.397 に答える
2
  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 経由で呼び出され、パフォーマンスが向上するネイティブ コーデックのインストールを検討してください。
于 2012-04-05T14:34:24.160 に答える
1

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

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

于 2013-03-28T07:50:34.907 に答える