我正在运行一个简单的地图并减少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 的博客以实现这一目标。