尽管 mapred.output.compress=true,hadoop 流仍会生成未压缩的文件

标签 hadoop hadoop-streaming

我像这样运行一个 hadoop 流作业:

hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar 
       -Dmapred.reduce.tasks=16
       -Dmapred.output.compres=true
       -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec
       -input foo
       -output bar
       -mapper "python zot.py"
       -reducer /bin/cat

我确实在输出目录中得到了 16 个包含正确数据的文件,但是这些文件没有被压缩:

$ hadoop fs -get bar/part-00012
$ file part-00012
part-00012: ASCII text, with very long lines
  1. 为什么 part-00012 没有压缩?
  2. 如何将我的数据集拆分为少量(比如 16 个)gzip 压缩文件?

附言。另见“Using gzip as a reducer produces corrupt data

PPS。这是vw .

PPPS。我想我可以做 hadoop fs -get, gzip, hadoop fs -put, hadoop fs -rm 16次,但这似乎是一种非常非 hadoopic 的方式。

最佳答案

您的 mapred.output.compres 参数中有错字。如果您查看自己的工作经历,我敢打赌它已关闭。

此外,您还可以避免将 reduce-stage 放在一起,因为那只是整理文件。除非您特别需要 16 个零件文件,否则请尝试将其保留为仅贴图。

    hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar 
   -Dmapred.reduce.tasks=0
   -Dmapred.output.compress=true
   -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec
   -input foo
   -output bar
   -mapper "python zot.py"

关于尽管 mapred.output.compress=true,hadoop 流仍会生成未压缩的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767799/

相关文章:

hadoop - 使用配置单元作为 Metastore 时无法看到数据库

hadoop - mapreduce 作业的 StreamInputFormat

hadoop - MAX(Count) 函数 apache pig latin

Hadoop - 流式传输时映射功能键

python - Hadoop 流 - 执行二进制应用程序问题的包装器

hadoop - 使用密码 ssh 的防护方法

linux - 启动 HBase Shell - Zookeeper 存在但失败

hadoop - 在HDFS中附加序列文件

hadoop - 有没有办法从HCATALOG访问配置单元元存储表?

hadoop - 是否可以在配置单元外部表中压缩 json?