多输入不工作-hadoop 2.5.0

sh7euo9m  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(345)

我试着写一个程序,有两个Map器同时执行和一个减速机。每个Map器都有不同的输入文件。基本上,我想做一个减少边连接。但当我以以下方式声明我的工作时,我会出错:

public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length != 3) {
        System.err.println("Usage: MovieRatings <in1> <in2> <out>");
        System.exit(2);
    }

    Job job = new Job(conf, "movieratings");
    job.setJarByClass(MovieRatings.class);
    job.setMapperClass(MovieIDJoinMapper.class);
    job.setMapperClass(MovieNameJoinMapper.class);
    MultipleInputs.addInputPath(job, new Path("/temp2"), TextInputFormat.class, MovieIDJoinMapper.class);
    MultipleInputs.addInputPath(job, new Path(otherArgs[1]), TextInputFormat.class, MovieNameJoinMapper.class);
    job.setReducerClass(ReduceSideJoin.class);
    job.setNumReduceTasks(1);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(Text.class);
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[2]));

    System.exit(job.waitForCompletion(true) ? 0 : 1);

}

我无法摆脱的错误是:

The method addInputPath(JobConf, Path, Class<? extends InputFormat>, Class<? extends Mapper>) in the type MultipleInputs is not applicable for the arguments (Job, Path, Class<TextInputFormat>, Class<MovieRatings.MovieIDJoinMapper>) MovieRatings.java   /homework2/src

现在我明白了如果我这么做的话它应该会起作用:

JobConf job = new JobConf();

但这也不管用。我正在使用hadoop2.5.0。我知道这可能是一个问题,由于版本和api之间的不匹配,但我尝试了不同的方式,似乎没有任何工作。有人能帮我吗?谢谢!

kr98yfug

kr98yfug1#

这是一个api不匹配的问题。您正在使用较新的类型,但以某种方式导入了旧的类型 org.apache.hadoop.mapred.lib.MultipleInputs 班级。将其更改为以下内容,错误将消失:

import org.apache.hadoop.mapreduce.lib.input.MultipleInputs;
eyh26e7m

eyh26e7m2#

我也犯了同样的错误。这里的问题一定是您可能同时使用了mapred和mapreduce库。
代替
导入org.apache.hadoop.mapred.textinputformat
具有
导入org.apache.hadoop.mapreduce.lib.input.textinputformat

相关问题