我在使用和不使用multipleOutputs运行mapreduce时看到控制台日志之间存在差异。
我有一个仅映射器作业输出到文本文件。
未配置MultipleOutputs,
我的Mapper中的代码段:
context.write(null,new Text(value));
控制台输出摘录
Map-Reduce Framework
Map input records=2
Map output records=2
使用MultipleOutputs,
我的Mapper中的代码段:
multipleOutputs.write(null,new Text(value),FileOutputFormat.getOutputPath(context).toString() + Path.SEPARATOR + "v");
控制台输出摘录
Map-Reduce Framework
Map input records=2
Map output records=0
避免空档文件的驱动程序代码
LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
请注意输出记录的数量。虽然,它在第二种情况下显示为0,但我仍然在文件中看到正确的输出。生成的文件名为v-m-00000。
我错过了什么吗?
答案 0 :(得分:1)
映射输出记录计算映射器发出的键值对的数量(使用context.write()
)。这是将记录器从映射器传递到reducer的唯一方法,这就是为什么这个计数器存在的原因。
如果你想计算从任何其他方法写入的记录数,或者实际上,如果你想要计算其他任何东西,你必须定义自己的自定义计数器,我建议在你的情况下。