Hadoop jobcontrol

时间:2014-08-19 21:09:29

标签: java hadoop mapreduce job-control

我正在尝试在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)

Is it better to use the mapred or the mapreduce package to create a Hadoop Job?所述,有两种不同的API,似乎在这里未对齐。进一步观察后,我找到了JobControl and JofConf.setMapperClass() error。他们说使用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工作,但我仍然对这个问题的答案感兴趣。

3 个答案:

答案 0 :(得分:1)

Oozie是一个用于描述作业工作流程的系统,其中该作业可能包含一组地图缩减作业,猪脚本,文件系统操作等,并支持数据流的分叉和连接。

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

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

答案 1 :(得分:0)

mapred是较旧的API集。

请更改为mapreduce以编码进一步的MR程序。

  • mapreduce api更加紧凑,并且在上下文类中封装了大部分内容,使编码器的生命变得简单

答案 2 :(得分: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);
}};

Here是您可能还会看到的示例。