hadoop - 如何使用一个 reducer 的输出作为另一个映射器的输入?

标签 hadoop mapreduce bigdata

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

最佳答案

您可以轻松做到这一点:只需将第一个作业的输出目录作为第二个作业的输入目录即可。在本例中我将其称为 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;

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

关于hadoop - 如何使用一个 reducer 的输出作为另一个映射器的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35475571/

相关文章:

java - 是否可以使用java代码读取crawldb?

java - 添加 hapi 3rd-party lib (jars) 到 map-reduce

eclipse - 线程 “main”中的异常java.io.IOException:无法初始化群集

asp.net-mvc - 在生产 MVC/SQL 应用程序中记录大量操作

hadoop - Pig Latin - foreach generate 方法在没有第一个字段的情况下不起作用

hadoop - 在 “hadoop fs -ls/”上获取异常

hadoop - 如何使用 Hive 将 '\N' 字符转换为空字符串

hadoop - 如何在Hadoop程序中使用外部Jar文件

java - Hive/Hadoop 中的唯一 key 生成

创建优化的总和减少