Java 使用hadoop作业的输出作为另一个作业的输入

Java 使用hadoop作业的输出作为另一个作业的输入,java,hadoop,mapreduce,hdfs,Java,Hadoop,Mapreduce,Hdfs,我在使用一个M/R作业的输出作为另一个M/R作业的输入时遇到问题。根据这一点以及许多其他在线资源,实现这一点的方法是创建一个job1,然后创建一个job2。但是,当我这样做时,我会得到以下错误: Error: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.LongWritable 我唯一一次使用LongWritable作为类,是作为映射器的键。我记得这

我在使用一个M/R作业的输出作为另一个M/R作业的输入时遇到问题。根据这一点以及许多其他在线资源,实现这一点的方法是创建一个job1,然后创建一个job2。但是,当我这样做时,我会得到以下错误:

Error: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.LongWritable
我唯一一次使用LongWritable作为类,是作为映射器的键。我记得这需要保持这样,因为这是输入文件中的偏移量。当我将签名更改为
Text
,如下所示:

public class ErrorMapperCombiner extends Mapper<Text, Text, Text, IntWritable>
那么,如何使用一个M/R作业的输出作为另一个M/R作业的输入呢

我在我的“跑步者”课程中也使用此链接:

job1.setOutputFormatClass(SequenceFileOutputFormat.class);

job1.setOutputKeyClass(Text.class);
job1.setOutputValueClass(IntWritable.class);

.....

job2.setInputFormatClass(SequenceFileInputFormat.class);

我设置了两次值。(例如)

虽然
SequenceFileOutputFormat
在它之后,所以我认为应该使用该值。但是,尽管如此,它现在起作用了

job1.setOutputFormatClass(SequenceFileOutputFormat.class);

job1.setOutputKeyClass(Text.class);
job1.setOutputValueClass(IntWritable.class);

.....

job2.setInputFormatClass(SequenceFileInputFormat.class);
job1.setOutputFormatClass(TextOutputFormat.class);
....
job1.setOutputFormatClass(SequenceFileOutputFormat.class);