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

这将产生一个 gzipped 输出:

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 中,转到 Services > Service mapreduce > Configuration > TaskTracker > Compression

  • 压缩 MapReduce 作业输出(客户端覆盖):不要覆盖客户端配置
于 2013-06-18T16:15:42.890 回答
-2

我为 Cloudera 工作并遇到了这篇文章。我只是想让您知道,Cloudera Manager 4.5(我确认的版本)至少可以选择不覆盖客户端配置,除了将客户端配置覆盖为真或假。这使其非常理想,因为您可以更改该设置以允许开发人员选择是否压缩输出。希望有所帮助——我知道这是不久前的事了。:)

于 2013-05-07T20:40:01.197 回答