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

时间:2013-11-15 05:22:04

标签: java hadoop mapreduce hdfs

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

Error: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.LongWritable

我唯一一次将LongWritable用作类,是我的mapper的关键。我记得这需要保持这样,因为这是输入文件中的偏移量。当我将签名更改为Text时,就像这样:

public class ErrorMapperCombiner extends Mapper<Text, Text, Text, IntWritable>

我收到此错误:

Error: java.lang.ClassCastException: org.apache.hadoop.io.IntWritable cannot be cast to org.apache.hadoop.io.Text

那么如何将一个M / R作业的输出用作另一个M / R作业的输入呢?

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

job1.setOutputFormatClass(SequenceFileOutputFormat.class);

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

.....

job2.setInputFormatClass(SequenceFileInputFormat.class);

1 个答案:

答案 0 :(得分:0)

我正在设置值两次。 (例如)

job1.setOutputFormatClass(TextOutputFormat.class);
....
job1.setOutputFormatClass(SequenceFileOutputFormat.class);

虽然SequenceFileOutputFormat在它之后,所以我认为会使用这个值。但是,现在仍然有效。