在两个单独的MapReduce作业之间传递值

时间:2014-02-03 05:44:43

标签: java hadoop

我有一个Hadoop程序,我需要将第一个MapReduce任务生成的单个输出传递给第二个MapReduce任务。

实施例。

MapReduce -1 - >将double值写入hdfs(文件名类似于part-00000)。 在第二个MapReduce作业中,我想使用part-00000文件中的double值。

我该怎么办?任何人都可以请给出一些代码片段。

1 个答案:

答案 0 :(得分:0)

等待第一个作业完成,然后在第一个作业的输出上运行第二个作业。你可以这样做:

1)在驱动程序

 int code = firstJob.waitForCompletion(true) ? 0 : 1;
 if (code) {
     Job secondJob = new Job(new Configuration(), "JobChaining-Second");
     TextInputFormat.addInputPath(secondJob, outputDirOfFirstJob);
     ...
 } 

2)使用 JobControl ControlledJob

http://hadoop.apache.org/docs/stable2/api/org/apache/hadoop/mapred/jobcontrol/JobControl.html

要使用 JobControl ,请先使用 ControlledJob 打包作业。这样做是 相对简单:你通常会创建你的工作,除了你也创建一个 ControlledJob 作业配置作为参数,以及 其依赖项列表(其他 ControlledJobs )。然后,将它们逐个添加到 JobControl 对象,用于处理其余部分。

3)外部(例如来自 shell脚本)。将输入/输出路径作为参数传递。

4)使用 Apache Oozie 。您将以XML格式指定作业。