提问者:小点点

如何使用一个减速器的输出作为另一个映射器的输入?


我想从还原器的输出中提取不同的值。为此,我在单独的映射器和还原器中编写代码。也就是说,我有一个映射器还原器用于生成训练文件,第二个映射器-还原器给出训练文件中不同的行。我想要两个文件用于测试目的。那么如何使用第一个还原器的输出到另一个映射器作为输入呢?


共2个答案

匿名用户

您可以轻松做到这一点:只需将第一个作业的输出目录作为输入目录传递给第二个作业。在这个例子中,我称之为outputTempDir:

String inputDir = "/input";
String outputTempDir = "/output/Temp"
String outputFinalDir = "/output/Final"

Configuration conf = new Configuration();
Job job1 = Job.getInstance(conf, "JOB_1");
job1.setMapperClass(Mapper1.class);
job1.setReducerClass(Reducer1.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job1, new Path(inputDir));
FileOutputFormat.setOutputPath(job1, new Path(outputTempDir));

boolean success = job1.waitForCompletion(true);
if (success) {
    Job job2 = Job.getInstance(conf, "JOB_2");
    job2.setMapperClass(Mapper2.class);
    job2.setReducerClass(Reducer2.class);
    job2.setInputFormatClass(KeyValueTextInputFormat.class);
    FileInputFormat.addInputPath(job2, new Path(outputTempDir));
    FileOutputFormat.setOutputPath(job2, new Path(outputFinalDir));
    success = job2.waitForCompletion(true);
}

return success;

确保第一个作业的输出格式与第二个作业的输入格式兼容。

匿名用户

也许你需要像Oozie这样的调度器工作。

Oozie让你的工作流的任务,并连接一个输出输入的其他任务。

Ozie留档:https://oozie.apache.org/docs/4.2.0/index.html

Oozie提供直观的用户界面来安排日程。