gpt4 book ai didi

hadoop - 不止一个 Reducer 和一个输出文件

转载 作者:可可西里 更新时间:2023-11-01 15:00:11 25 4
gpt4 key购买 nike

在我的 hadoop 代码中,我有 4 个 reducer,而且我总是有 4 个输出文件,这很正常,因为每个 reducer 都将其结果放在一个文件中。我的问题是:我怎样才能拥有一个且只有一个输出文件?

问题是我有一个迭代 mapreduce 作业,它需要一个输入文件,将其分成 block 并将每个 block 提供给映射器,所以这就是为什么我必须收集所有 reducer 结果并将它们放在一个输出文件中为了以等价的方式将该输出文件分成 4 个部分,然后将每个部分提供给一个映射器,依此类推。

最佳答案

您可以试试 MultipleOutputs,您可以在其中指定每个 reducer 应该写入的输出文件。例如在你的 reducer 代码中:

   ...
public void setup(Context context) {
out = new MultipleOutputs<YourKey,YourValue>(context);
}
public void reduce(YourKey key, Iterable<YourValue> values, Context context)
throws IOException, InterruptedException {
.......
//instead of writing using context, use multipleoutput here
//context.write(key, your-result);
out.write(key, your-result,"path/filename");
}
public void cleanup(Context context) throws IOException,InterruptedException {
out.close();
}
.....

对于这种情况,您还需要确保一些作业配置。

......
job.setOutputFormatClass(NullOutputFormat.class);
LazyOutputFormat.setOutputFormatClass(job, FileOutputFormat.class);
FileOutputFormat.setOutputPath(job, new Path("output"));
......

在这种情况下,每个reducer输出将被写入output/path/filename

关于hadoop - 不止一个 Reducer 和一个输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306214/

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