Java和Hadoop:与TextInputFormat不兼容的类型

时间:2014-04-27 22:09:05

标签: java hadoop extending

我正在使用hadoop核心0.20.2并且在尝试为我的作业设置输入格式时遇到了不兼容类型的问题。我正试图让一个简单的wordcount程序运行。

这是我的主要方法:

public static void main(String[] args) throws Exception{
    JobConf conf = new JobConf(Wordcount.class);
    conf.setJobName("wordcount");

    conf.setOutputKeyClass(Text.class);
    conf.setOutputValueClass(IntWritable.class);

    conf.setMapperClass(Map.class);
    conf.setCombinerClass(Reduce.class);
    conf.setReducerClass(Reduce.class);

    conf.setInputFormat(TextInputFormat.class);
    conf.setOutputFormat(TextOutputFormat.class);

    FileInputFormat.setInputPaths(conf, new Path(args[0]));
    FileOutputFormat.setOutputPath(conf, new Path(args[1]));

    JobClient.runJob(conf);
}

conf.setInputFormat(TextInputFormat.class);行上,我收到错误incompatible types class<TextInputFormat> cannot be converted to Class<? extends InputFormat>

当我看一下setInputFormat方法时,我看到:

public void setInputFormat(Class<? extends InputFormat> theClass) {
}

虽然我不能100%确定我收集的Class<? extends InputFormat> theClass意味着我必须通过一个扩展InputFormat的类。如果我走错了路,请告诉我。

所以当我看一下TextInputFormat类时,我看到了:

public class TextInputFormat extends FileInputFormat<LongWritable, Text>

所以我传递了一个扩展FileInputFormat和NOT InputFormat的类。

但我相信FileInputFormat扩展了InputFormat,因为我在声明中看到了

public abstract class FileInputFormat<K extends Object, V extends Object> extends InputFormat<K, V>

我是否理解为什么会收到此错误?或者我完全错了,通过一个将正确的类扩展到任何n度的类是有效的吗?

我对Java很新,甚至更新Hadoop。我想要指出,我也在线上出错

FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));

读作&#34;不兼容的类型:JobConf无法转换为Job&#34;。我知道0.20.2不是Hadoop的最新版本,但我必须使用这个版本。在新版本的Hadoop中,我遇到了创建作业配置的其他方法,并开始认为我遇到了问题,因为我可能会引用我们在0.20.2之后添加的类。

我正在阅读在线资源以帮助获取工作副本,但我从不知道正在使用的是什么版本。所以我现在可能有不匹配的代码。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

看看这些类来自哪些包。您应该使用一组包含“mapred”作为一个级别的包或另一个具有“mapreduce”作为一个级别的包。我怀疑你是在混合包,你需要使用其他包中的TextInputFormat。