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