【问题标题】:Hadoop jobcontrolHadoop作业控制
【发布时间】:2014-10-13 02:53:20
【问题描述】:

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

【问题讨论】:

    标签: java hadoop mapreduce job-control


    【解决方案1】:

    自从您提出问题以来已经过去了很长时间,但是您将错误的对象添加到 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 是一个您也可以查看的示例。

    【讨论】:

      【解决方案2】:

      mapred 是较旧的 API 集。

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

      • mapreduce api 更加紧凑,并且将大部分内容封装在 context 类中,让 coder 的生活变得简单

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多