我想从减速机的输出中提取不同的值。为此,我在单独的mapper和reducer中编写了一个代码。也就是说,我有一个mapper reducer来生成一个训练文件,第二个mapper reducer给出训练文件中不同的行。我想要两个文件用于测试目的。那么,如何使用第一个reducer的输出作为另一个Map器的输入呢?
igsr9ssn1#
您可以很容易地做到这一点:只需将第一个作业的输出目录作为输入目录传递给第二个作业。在本例中,我称之为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;
确保第一个作业的输出格式与第二个作业的输入格式兼容。
ltqd579y2#
也许你需要一个像oozie这样的调度员。oozie允许您创建任务的工作流,并将一个输出连接到另一个任务的输入。oozie文档:https://oozie.apache.org/docs/4.2.0/index.htmloozie提供了可视化的程序调度ui。
2条答案
按热度按时间igsr9ssn1#
您可以很容易地做到这一点:只需将第一个作业的输出目录作为输入目录传递给第二个作业。在本例中,我称之为outputtempdir:
确保第一个作业的输出格式与第二个作业的输入格式兼容。
ltqd579y2#
也许你需要一个像oozie这样的调度员。
oozie允许您创建任务的工作流,并将一个输出连接到另一个任务的输入。
oozie文档:https://oozie.apache.org/docs/4.2.0/index.html
oozie提供了可视化的程序调度ui。