我正在尝试在 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 ,但我仍然对答案感兴趣对于问题。