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文檔中的部分使用模式。它現在很好用。 –