我是从 Hadoop 框架入手,我的任务是为框架编写 map-reduce 应用程序并提交。我必须使用 Hadoop 0.22.0 版。我只是在学习基本概念和 API。然而,我发现学习它和编写一些原型(prototype)程序非常都很难,因为the official documentation和 API javadocs已过时、不完整、通常困惑甚至不存在。
这里只是一些我不明白的想法:The MapReduce tutorial for Hadoop 0.22.0使用 here 类的构造函数( Job
,第 101 行)已弃用。所有其他构造函数也已弃用。 javadocs 中没有关于要使用什么的注释。 Job
类的静态方法返回 Job
的实例,但这些方法没有记录,它们需要记录不完整的类的实例 Cluster
作为参数。所以在阅读了所有这些乱七八糟的内容之后,我仍然不知道如何正确获取 Job
的实例。对此的任何帮助表示赞赏。
当我试图在 1.0.4 稳定版等更高版本的教程中寻找答案时,我发现该版本的 mapreduce 教程使用了 org.apache.hadoop.mapred
包中的所有类在版本 0.22.0 中已弃用。所以 0.22.0 比 1.0.4 更令人反感。请帮助我理解这一点。或者推荐一些更好的资源。
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 对象时将 Cluster
设置为 null。在这种情况下,您将让 Job 类在真正需要时建立连接(请参阅更多信息 here):
Job job = Job.getInstance(conf);