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