我正在运行一个简单的映射并减少Hadoop
作业。属性mapred.reduce.tasks
已由Hadoop
管理员在mapred-site.xml
文件中设置。假设是25。现在,我的工作只生成4个不同的密钥,所以25个part-r-xxxx
文件中只有4个是非空的,其余都是空文件。如何防止这种情况发生?我只想要与生成的密钥数量一样多的输出文件(我事先不知道)。
谢谢。
我建议使用LazyOutputFormat
:
LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
这将确保只有在存在该reducer的一些实际数据时才创建输出文件。
或者您也可以覆盖FileOutputCommitter的needsTaskCommit()函数。
查看Chris的博客可以实现这一点。