无法在Mapside Join中使用CompositetextinputFormat

时间:2017-07-03 11:16:11

标签: java hadoop mapreduce high-availability

我正在尝试使用CompositeTextInoutFormat实现地图端连接。但是我在Map reduce作业中遇到了以下错误,我无法解决。 1.在下面的代码中,我在使用Compose方法时遇到错误,并且在设置inputformat Class时也出错。错误如下所示。

  

该方法包括(String,Class,Path ...)in   CompositeInputFormat类型不适用于参数   (String,Class,Path [])

有人可以帮忙吗

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);
}

1 个答案:

答案 0 :(得分:1)

我想说你的问题可能与混合hadoop API有关。您可以看到导入的内容混合了mapredmapreduce

例如,您尝试将org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormatorg.apache.hadoop.mapred.join.CompositeInputFormat一起使用,这不太可行。

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