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); 彼此不同意。使它们保持一致,它应该可以工作。