我正在尝试在hadoop中实现迭代MapReduce。第一个MapReduce作业的结果是一个包含两个DoubleArrayWritable的MapWritable。我的第一个映射器的一部分是:
for(it=0;it<10;it++){ //change the stopping condition
outPath = new Path(inPath+"_"+it);
// delete existing directory
if (hdfs.exists(outPath)) {
hdfs.delete(outPath, true);
}
Job job2 = new Job(conf,"OutputWeightCalc");
job2.setMapperClass(secMapper.class);
job2.setMapOutputKeyClass(Text.class);
job2.setMapOutputValueClass(MapWritable.class);
job2.setReducerClass(finalReducer.class);
job2.setOutputKeyClass(Text.class);
job2.setOutputValueClass(MapWritable.class);
job2.setInputFormatClass(SequenceFileInputFormat.class);
job2.setOutputFormatClass(SequenceFileOutputFormat.class);
FileInputFormat.addInputPath(job2, inPath);
FileOutputFormat.setOutputPath(job2, outPath);
job2.waitForCompletion(true);
count = job2.getCounters();
inPath = outPath;
}
通过使用身份缩减器,我终于获得了mapper的输出,因为它是最终输出。现在我想将这些输出用作迭代MapReduce作业的输入。问题是,每次迭代时,一个全局变量都会更新,我希望在下一次迭代中将它作为输入传递给第一个MapReduce作业的输出。来自驱动程序类的代码片段
pom.xml
现在的问题是如何将两个输出合并为一个并将其作为输入路径传递给下一个迭代映射器?我想合并两个创建为MR作业输出的SequenceFiles,但我不知道如何做到这一点。有人帮忙。
谢谢!