gpt4 book ai didi

Hadoop:如何在同一个作业中输出不同的格式类型?

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

我想在一个作业中同时输出gziplzo 格式。

我使用了 MultipleOutputs,并像这样添加了两个命名输出:

MultipleOutputs.addNamedOutput(job, "LzoOutput", GBKTextOutputFormat.class, Text.class, Text.class);

GBKTextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);

MultipleOutputs.addNamedOutput(job, "GzOutput", TextOutputFormat.class, Text.class, Text.class);

TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

(这里的GBKTextOutputFormat是我自己写的扩展了FileOutputFormat)

它们被用在 reducer 中,例如:

multipleOutputs.write("LzoOutput", NullWritable.get(), value, "/user/hadoop/lzo/"+key.toString());

multipleOutputs.write("GzOutput", NullWritable.get(), value, "/user/hadoop/gzip/"+key.toString());

结果是:

我可以在两个路径中获得输出,但它们都是 gzip 格式。

有人可以帮助我吗?谢谢!

============================================= ===========================

更多:

刚刚看了FileOutputFormatsetOutputCompressorClass的源码,其中conf.setClass("mapred.output.compression.codec", codecClass, CompressionCodec.class);

似乎配置中的mapred.output.compression.codec会在调用setOutputCompressorClass时被重置。

所以实际的压缩格式是我们最后设置的,不能在同一个作业中设置两种不同的压缩格式吗?还是有其他东西被忽略了?

最佳答案

所以也许作为一种变通方法,尝试直接在配置中设置正确的 outputCompressorClass

context.getConfiguration().setOutputCompressorClass(GzipCodec.class);

就在您对每个输出进行写入调用之前。看起来除了键类、值类和输出路径之外的任何输出格式配置参数都没有被 MultipleOutputs 很好地处理,我们可能不得不编写一些代码来弥补这种疏忽。

关于Hadoop:如何在同一个作业中输出不同的格式类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953010/

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