0

我正在尝试在 Hadoop 中运行多个 Map/Reduce 任务。在谷歌上搜索后,我使用了http://cloudcelebrity.wordpress.com/2012/03/30/how-to-chain-multiple-mapreduce-jobs-in-hadoop/中所述的方法 2 :使用 JobControl。我收到以下错误:

/examples2/format/Dictionary.java:100: error: no suitable method found for addJob(org.apache.hadoop.mapreduce.Job)
jbcntrl.addJob(job);
       ^
method JobControl.addJob(org.apache.hadoop.mapred.jobcontrol.Job) is not applicable
      (actual argument org.apache.hadoop.mapreduce.Job cannot be converted to org.apache.hadoop.mapred.jobcontrol.Job by method invocation conversion)

使用 mapred 或 mapreduce 包创建 Hadoop 作业是否更好?,有两个不同的 API,在这里似乎没有对齐。进一步查看后,我发现JobControl 和 JofConf.setMapperClass() 错误。他们说使用 mapreduce 包org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl' instead of 'org.apache.hadoop.mapred.jobcontrol.JobControl 应该可以解决它。唯一的问题是:我正在使用它。当我查看这个特定文件时(hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/lib/jobcontrol/JobControl.源代码中的java),我看到它正在使用

import org.apache.hadoop.mapred.jobcontrol.Job;

代替

import org.apache.hadoop.mapreduce.Job;

在我看来,这是导致错误的原因(正确吗?)。除了将代码恢复为 mapred 之外,还有什么方法可以解决这个问题?或者运行多个 M/R 作业的任何其他方式?

更新:我从http://cloudcelebrity.wordpress.com/2012/03/30/how-to-chain-multiple-mapreduce-jobs-in-hadoop/获得了方法 1 ,但我仍然对答案感兴趣对于问题。

4

3 回答 3

0

mapred 是较旧的 API 集。

请更改为 mapreduce 以编写更多 MR 程序。

  • mapreduce api 更加紧凑,并且将大部分内容封装在 context 类中,使 coder 的生活变得简单
于 2015-04-28T18:05:40.603 回答
0

自从您提出问题以来已经过去了很长时间,但是您将错误的对象添加到 JobControl。您需要使用名为 ControlledJob 的类来包装 Job,然后才能将其添加到 JobControl。这是一个小例子:

Job jobWordCount = Job.getInstance [...]
[setup jobWordCount]
Job jobSort = Job.getInstance [...]
[setup jobSort]

JobControl jobControl = new JobControl("word-count-control") {{
    ControlledJob count = new ControlledJob(jobWordCount, null);
    ControlledJob sort = new ControlledJob(jobSort,  Arrays.asList(count));
    addJob(count);
    addJob(sort);
}};

是一个您也可以查看的示例。

于 2019-10-24T14:47:23.357 回答
-1

Oozie 是一个用于描述作业工作流程的系统,该作业可能包含一组 map reduce 作业、pig 脚本、文件系统操作等,并支持数据流的 fork 和 join。

oozie 文档有一个包含多个 MR 作业的示例,包括一个 fork:

http://oozie.apache.org/docs/3.2.0-incubating/WorkflowFunctionalSpec.html#Appendix_B_Workflow_Examples

于 2015-04-28T06:37:41.197 回答