4

この単純な問題のように見えるものについて、見つけたすべての例を読んで試しました。圧縮されていないテキスト ファイルのセットがあり、それらに対して処理ステップを実行し、結果を含む圧縮ファイルのセットを出力するとします。簡単にするために、この例ではcat処理ステップを想定しています。

私が見つけたものはすべて、これがうまくいくはずだと示唆しています:

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
    -Dmap.output.compress=true \
    -Dmap.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -mapper /bin/cat \
    -reducer NONE \
    -input /path_to_uncompressed \
    -output /path_to_compressed

ジョブは正常に実行されますが、プレーン テキスト ファイルが出力されます。入力ファイル サイズの変更、コーデックの変更 (Snappy、BZip2 など)、リデューサーの追加、mapred.output.compression.type (BLOCK、RECROD) の設定などを試しましたが、結果は常に同じです。参考までに、私は CDH 4.1.2 の新規インストールを使用しています。

4

3 に答える 3

7

以下は Hadoop v1.0.0で動作します。

これにより、gzip された出力が生成されます。

hadoop jar /home/user/hadoop/path_to_jar/hadoop-streaming-1.0.0.jar \
    -D mapred.output.compress=true \
    -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -D mapreduce.job.reduces=0 \
    -mapper /bin/cat \
    -input /user/hadoop/test/input/test.txt \
    -output /user/hadoop/test/output

出力としてのブロック圧縮された SequenceFile:

hadoop jar /home/user/hadoop/path_to_jar/hadoop-streaming-1.0.0.jar \
    -D mapred.output.compress=true \
    -D mapred.output.compression.type=BLOCK \
    -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -D mapreduce.job.reduces=0 \
    -mapper /bin/cat \
    -input /user/hadoop/test/input/test.txt \
    -output /user/hadoop/test/output
    -outputformat org.apache.hadoop.mapred.SequenceFileOutputFormat

パラメータの順序と、-D とプロパティ名の間のスペースに注意してください。

YARN の場合、多くのプロパティが廃止されました (完全なリストはこちらを参照してください)。したがって、次の変更を行う必要があります。

mapred.output.compress -> mapreduce.output.fileoutputformat.compress mapred.output.compression.codec -> mapreduce.output.fileoutputformat.compress.codec mapred.output.compression.type -> mapreduce.output.fileoutputformat.compress.type

于 2012-12-02T19:54:21.313 に答える
0

Cloudera Manager で、[サービス] > [サービス mapreduce] > [構成] > [TaskTracker] > [圧縮] に移動します。

  • MapReduce ジョブ出力の圧縮 (クライアント オーバーライド) : クライアント構成をオーバーライドしません。
于 2013-06-18T16:15:42.890 に答える