Java Map Reduce 使用 SequenceFIle 作为 reducer 输出
Java Map Reduce use SequenceFIle as reducer output
我有一个正在运行的 Java Map Reduce 程序,有 2 个作业。第一个 reduce 的输出写入文件并由第二个映射器读取。
我想将第一个 reducer 输出更改为 SequenceFile。
我该怎么做?
这是我的程序的主要部分
public static void main(String[] args) throws Exception {
//setup first job
Configuration conf = new Configuration();
conf.set("mapred.textoutputformat.separator", "&");
Job job = Job.getInstance(conf, "First Job");
job.setJarByClass(Prova.class);
job.setMapperClass(FirstMapper.class);
job.setReducerClass(FirstReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
Path tempOutput=new Path("FirstMapper");
FileOutputFormat.setOutputPath(job, tempOutput);
job.waitForCompletion(true);
//setup second job
Configuration conf2 = new Configuration();
conf2.set("mapred.textoutputformat.separator", " ");
conf2.set("numberOfELements", args[2]);
Job job2 = Job.getInstance(conf2, "Second Job");
job2.setJarByClass(Prova.class);
job2.setMapperClass(SecondMapper.class);
job2.setReducerClass(SecondReducer.class);
job2.setOutputKeyClass(Text.class);
job2.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job2, tempOutput);
FileOutputFormat.setOutputPath(job2, new Path(args[1]));
System.exit(job2.waitForCompletion(true) ? 0 : 1);
}
我已经尝试添加以下行:
job.setOutputFormatClass(SequenceFileOutputFormat.class);
job2.setInputFormatClass(SequenceFileInputFormat.class);
但我收到以下错误:wrong value class: org.apache.hadoop.io.Text is not class org.apache.hadoop.io.IntWritable
。当我在第一个减速器中制作 contect.write(Text,Text) 时发生错误。
context.write(Text, Text)
和 job.setOutputValueClass(IntWritable.class);
彼此不同意。使它们保持一致,它应该可以工作。
我有一个正在运行的 Java Map Reduce 程序,有 2 个作业。第一个 reduce 的输出写入文件并由第二个映射器读取。
我想将第一个 reducer 输出更改为 SequenceFile。
我该怎么做?
这是我的程序的主要部分
public static void main(String[] args) throws Exception {
//setup first job
Configuration conf = new Configuration();
conf.set("mapred.textoutputformat.separator", "&");
Job job = Job.getInstance(conf, "First Job");
job.setJarByClass(Prova.class);
job.setMapperClass(FirstMapper.class);
job.setReducerClass(FirstReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
Path tempOutput=new Path("FirstMapper");
FileOutputFormat.setOutputPath(job, tempOutput);
job.waitForCompletion(true);
//setup second job
Configuration conf2 = new Configuration();
conf2.set("mapred.textoutputformat.separator", " ");
conf2.set("numberOfELements", args[2]);
Job job2 = Job.getInstance(conf2, "Second Job");
job2.setJarByClass(Prova.class);
job2.setMapperClass(SecondMapper.class);
job2.setReducerClass(SecondReducer.class);
job2.setOutputKeyClass(Text.class);
job2.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job2, tempOutput);
FileOutputFormat.setOutputPath(job2, new Path(args[1]));
System.exit(job2.waitForCompletion(true) ? 0 : 1);
}
我已经尝试添加以下行:
job.setOutputFormatClass(SequenceFileOutputFormat.class);
job2.setInputFormatClass(SequenceFileInputFormat.class);
但我收到以下错误:wrong value class: org.apache.hadoop.io.Text is not class org.apache.hadoop.io.IntWritable
。当我在第一个减速器中制作 contect.write(Text,Text) 时发生错误。
context.write(Text, Text)
和 job.setOutputValueClass(IntWritable.class);
彼此不同意。使它们保持一致,它应该可以工作。