hadoop作业控制

kzipqqlq  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(309)

我尝试在hadoop中运行多个map/reduce任务。在google上搜索之后,我使用了第2种方法http://cloudcelebrity.wordpress.com/2012/03/30/how-to-chain-multiple-mapreduce-jobs-in-hadoop/ :使用作业控制。我得到以下错误:

/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/ 但我仍然对这个问题的答案感兴趣。

0sgqnhkj

0sgqnhkj1#

mapred是旧的api集。
请更改为mapreduce以进一步编码mr程序。
mapreduceapi更加紧凑,并将大部分内容封装在上下文类中,使编码器的工作变得简单

ugmeyewa

ugmeyewa2#

oozie是一个描述作业工作流的系统,其中该作业可能包含一组map-reduce作业、pig脚本、文件系统操作等,并支持数据流的fork和join。
oozie文档中有一个包含多个mr作业的示例,包括一个fork:
http://oozie.apache.org/docs/3.2.0-incubating/workflowfunctionalspec.html#appendix_b_workflow_examples

bqucvtff

bqucvtff3#

自从您在何处提出问题以来,已经过了相当长的一段时间,但是您将错误的对象添加到jobcontrol中。您需要使用名为controlledjob的类 Package 作业,然后才能将其添加到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);
}};

下面是一个例子,你也可以看看。

相关问题