我尝试在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/ 但我仍然对这个问题的答案感兴趣。
3条答案
按热度按时间0sgqnhkj1#
mapred是旧的api集。
请更改为mapreduce以进一步编码mr程序。
mapreduceapi更加紧凑,并将大部分内容封装在上下文类中,使编码器的工作变得简单
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
bqucvtff3#
自从您在何处提出问题以来,已经过了相当长的一段时间,但是您将错误的对象添加到jobcontrol中。您需要使用名为controlledjob的类 Package 作业,然后才能将其添加到jobcontrol。下面是一个小例子:
下面是一个例子,你也可以看看。