gpt4 book ai didi

hadoop - 在 Hadoop 中使用 MultipleOutputs 时 GZIP 文件末尾损坏

转载 作者:可可西里 更新时间:2023-11-01 16:27:01 28 4
gpt4 key购买 nike

我正在压缩 Hadoop MR 作业的输出:

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 的解决方案,那会更好。

最佳答案

只是一个猜测(没有看到你的 reducer 代码),但是你是在你的 reducer 的清理方法?

看起来 gzip 文件的最后一个 block 没有被写入 - 与没有调用上述方法一致

关于hadoop - 在 Hadoop 中使用 MultipleOutputs 时 GZIP 文件末尾损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14111911/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com