作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我基本上是在尝试将我自己的 Tab 分隔值行写到 3 个不同的输出文件中。尽管定义和编写了不同的命名输出,但所有文件仍被命名为“part-r-*”
所有代码都经过匿名和压缩
驱动类如下所示:
// Set up job
Job job = new Job(conf, MyDriver.class.getSimpleName());
job.setJarByClass(MyJar.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
// Set mappers and reducers
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setInputFormatClass(TextInputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]);
// Set the 3 different outputs
MultipleOutputs.addNamedOutput(job, "out1", TextOutputFormat.class,
Text.class, Text.class);
MultipleOutputs.addNamedOutput(job, "out2", TextOutputFormat.class,
Text.class, Text.class);
MultipleOutputs.addNamedOutput(job, "errors", TextOutputFormat.class,
Text.class, Text.class);
// Run
System.exit(job.waitForCompletion(true) ? 0 : 1);
reducer 在 setup() 方法中设置 MultipleOutput:
public void setup(Context context) {
// Set up multiple output files
multiOut = new MultipleOutputs<Text,Text>(context);
}
然后从 3 个独立的方法中调用,每个方法都与不同的输出有关,例如,错误是最简单的:
private void writeError(String error) {
System.out.println("Writing: " + error);
multiOut.write("errors", new Text(error), new Text());
}
问题是我可以看到我的日志中有来自 System.out.println 的正确输出,但实际上没有任何内容写入文件。我什至在清理中调用了 multiOut.close()。
我想我只是在驱动程序类中遗漏了一些东西?如果我需要提供任何其他数据,请告诉我。
如果值得注意的话,这是在 Amazon EMR/S3 上运行的,但我认为这不是问题所在。
最佳答案
这并不是我真正想要的答案,但它确实有效。正如@DavisBroda 所建议的,我更改了我的代码以使用指定基本输出的 write
方法。无论出于何种原因,我使用的名称根本不会在输出中使用,但至少我可以指定不同的输出文件夹,这为我提供了足够的分隔空间以供我使用。
从上面的例子来看是这样的:
private void writeError(String error) {
System.out.println("Writing: " + error);
multiOut.write("errors", new Text(error), new Text(), basePath + "/errors/");
}
关于hadoop - MultipleOutputs 不写入文件,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19947472/
我是一名优秀的程序员,十分优秀!