我正在尝试使用一项作业在 hadoop 程序中的同一输入文件上运行 2 个独立的映射器。我希望两个映射器的输出都进入一个减速器。我面临运行多个映射器的问题。我正在使用 MultipleInputs 类。它通过运行两个映射器工作正常,但昨天我注意到它只运行一个映射函数,即第二个 MultipleInputs 语句似乎覆盖了第一个。我没有发现对代码进行任何更改以突然显示这种不同的行为:(请帮助我。主要功能是:
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = new Job(conf, "mapper accepting whole file at once");
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(IntWritable.class);
job.setJarByClass(TestMultipleInputs.class);
job.setMapperClass(Map2.class);
job.setMapperClass(Map1.class);
job.setReducerClass(Reduce.class);
job.setInputFormatClass(NLinesInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.setMapOutputKeyClass(IntWritable.class);
** MultipleInputs.addInputPath(job, new Path("Rec"), NLinesInputFormat.class, Map1.class);
MultipleInputs.addInputPath(job, new Path("Rec"), NLinesInputFormat.class, Map2.class);**
FileOutputFormat.setOutputPath(job,new Path("testMulinput"));
job.waitForCompletion(true);
}
最后一个 MultipleInputs 语句中使用的 Map 类都会被执行。就像在这里 Map2.class 被执行。