0
我压缩Hadoop的MR作业的输出使用MultipleOutputs时:腐败的Hadoop
conf.setOutputFormat(TextOutputFormat.class);
TextOutputFormat.setCompressOutput(conf, true);
TextOutputFormat.setOutputCompressorClass(conf, GzipCodec.class);
我使用MultipleOutputs,如:
MultipleOutputs.addMultiNamedOutput(conf, "a", TextOutputFormat.class, Text.class, Text.class);
MultipleOutputs.addNamedOutput(conf, "b", TextOutputFormat.class, Text.class, Text.class);
LazyOutputFormat.setOutputFormatClass(conf, TextOutputFormat.class);
另外,各这些工作很好。我可以得到我想要的输出的划分,并且我可以输出gzip。但是,将这些文件一起使用时,gzip文件最终会损坏。每个输出文件大约有25000行。当我做类似
hadoop dfs -cat output/*.gz | less +24000
一切看起来都很正常。但是,如果我做
hadoop dfs -cat output/*.gz | less +40000
我得到的错误,如
zcat: stdin: invalid compressed data--crc error
zcat: stdin: invalid compressed data--length error
zcat: stdin: invalid compressed data--format violated
如果我再重复第一个命令,并通过文件开始扫描,最终我遇到上述错误之一不完整的线路或几个后非常长,非常损坏的行(我认为它们很长,因为换行符也被破坏)并且less
不能继续。
所以,我的问题是:有没有人看过这个之前,有没有办法解决它?
注意:我正在使用mapred API而不是mapreduce。我可以尝试翻译成新的API,但是如果我可以使用mapred找到解决方案,那将是更可取的。
谢谢谢谢谢谢一致!我完全忽略了MultipleOutputs文档中的部分使用模式。它现在很好用。 –