Java 无法在Mapside联接中使用CompositetextinputFormat

Java 无法在Mapside联接中使用CompositetextinputFormat,java,hadoop,mapreduce,high-availability,Java,Hadoop,Mapreduce,High Availability,我正在尝试使用compositextinoutformat实现映射端连接。然而,我在地图缩小作业中遇到以下错误,我无法解决,。 1.在下面的代码中,我在使用Compose方法时出错,在设置inputformat类时也出错。错误如下所示 中的方法组合(字符串、类、路径…) 类型CompositeInputFormat不适用于参数 (字符串、类、路径[]) 有人能帮忙吗 package Hadoop.MR.Practice; import org.apache.hadoop.conf.Config

我正在尝试使用
compositextinoutformat
实现映射端连接。然而,我在地图缩小作业中遇到以下错误,我无法解决,。 1.在下面的代码中,我在使用Compose方法时出错,在设置inputformat类时也出错。错误如下所示

中的方法组合(字符串、类、路径…) 类型CompositeInputFormat不适用于参数 (字符串、类、路径[])

有人能帮忙吗

package Hadoop.MR.Practice;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.join.CompositeInputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
//import org.apache.hadoop.mapred.join.CompositeInputFormat;


public class MapJoinJob implements Tool{

private Configuration conf;     

public Configuration getConf() {
    return conf;
}
public void setConf(Configuration conf) {
    this.conf = conf;
}
@Override
public int run(String[] args) throws Exception {
    Job job = Job.getInstance(getConf(), "MapSideJoinJob");
    job.setJarByClass(this.getClass());

    Path[] inputs = new Path[] { new Path(args[0]), new Path(args[1])};
    String join = CompositeInputFormat.compose("inner", KeyValueTextInputFormat.class, inputs);
    job.getConfiguration().set("mapreduce.join.expr", join);

    job.setInputFormatClass(CompositeInputFormat.class);

    job.setMapperClass(MapJoinMapper.class);
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(LongWritable.class);

    //Configuring reducer
    job.setReducerClass(WCReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(LongWritable.class);
    job.setNumReduceTasks(0);

    FileOutputFormat.setOutputPath(job, new Path(args[2]));

    job.waitForCompletion(true);
    return 0;
}

public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    MapJoinJob mjJob = new MapJoinJob();
    ToolRunner.run(conf, mjJob, args);
}

我认为您的问题可能与混合hadoop API有关。您可以看到您的导入混合了
mapred
mapreduce

例如,您试图将
org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat
org.apache.hadoop.mapred.join.CompositeInputFormat
一起使用,这不太可能奏效

您应该选择一个(我想可能是
mapreduce
),并确保所有内容都使用相同的API