0

我从 Hadoop 框架开始,我的任务是为框架编写 map-reduce 应用程序并提交它。我必须使用 Hadoop 的 0.22.0 版本。我只是在学习基本概念和 API。然而,我发现学习它和编写一些原型非常困难,因为官方文档API javadocs都是过时的、不完整的、通常是混乱的,甚至不存在。

以下是我不理解的几个想法:Hadoop 0.22.0 的 MapReduce 教程使用了已弃用的类的构造函数(此处,第 101 行) 。Job所有其他构造函数也被弃用。javadocs 中没有说明要使用什么。有类的静态方法Job返回实例,Job但这些方法是未记录的,它们需要记录不良的类的实例Cluster作为参数。因此,在阅读了所有这些混乱之后,我仍然不知道如何正确获取Job. 对此的任何帮助表示赞赏。

当我试图在 1.0.4 stable 等更高版本的教程中找到答案时,我发现该版本的 mapreduce 教程使用了org.apache.hadoop.mapred0.22.0 版中已弃用的包中的所有类。所以 0.22.0 比 1.0.4 更讨厌。请帮助我理解这一点。或者建议一些更好的资源。

4

1 回答 1

2

Javadoc可能有点混乱,因此查看 Job 类的源代码可能会对您有所帮助:

  ...
  @Deprecated
  public Job() throws IOException {
    this(new Configuration());
  }

  @Deprecated
  public Job(Configuration conf) throws IOException {
    this(new Cluster(conf), conf);
  }

  @Deprecated
  public Job(Configuration conf, String jobName) throws IOException {
    this(conf);
    setJobName(jobName);
  }

  Job(Cluster cluster) throws IOException {
    this(cluster, new Configuration());
  }

  Job(Cluster cluster, Configuration conf) throws IOException {
    super(conf, null);
    this.cluster = cluster;
  }

  ...
  public static Job getInstance(Cluster cluster, Configuration conf) 
      throws IOException {
    return new Job(cluster, conf);
  }

所以你可以使用:

...
Configuration conf = getConf();
Job job = Job.getInstance(new Cluster(conf), conf);

请注意,以这种方式实例化 Job 类将同时创建与的连接job tracker

如果您想推迟这样做,您可以选择在创建 Job 对象时通过设置为 null 来延迟初始化此连接。Cluster在这种情况下,您将让 Job 类在真正需要时建立连接(请参阅此处的更多信息):

Job job = Job.getInstance(conf);
于 2012-11-06T00:04:05.263 回答