我为hadoop 0.20.2写了一个简单的map任务,输入数据集由44个文件组成,每个文件大约3-5MB。任何文件的每一行都有格式int,int
。输入格式是默认TextInputFormat
的,映射器的工作是解析输入Text
为整数。
任务运行后,hadoop框架的统计显示map任务的输入记录数只有44条。我尝试调试,发现该方法的输入记录map
只是每个文件的第一行。
有谁知道问题是什么,我在哪里可以找到解决方案?
提前谢谢你。
编辑 1
输入数据由不同的 map-reduce 任务生成,其输出格式为TextOutputFormat<NullWritable, IntXInt>
. 的toString()
方法IntXInt
应该给出一个字符串int,int
。
编辑 2
我的映射器如下所示
static class MyMapper extends MapReduceBas
implements Mapper<LongWritable, Text, IntWritable, IntWritable> {
public void map(LongWritable key,
Text value,
OutputCollector<IntWritable, IntWritable> output,
Reporter reporter) {
String[] s = value.toString().split(",");
IntXInt x = new IntXInt(s[0], s[1]);
output.collect(x.firstInt(), x.secondInt());
}
}
编辑 3
我刚刚检查过,映射器实际上只为每个文件读取 1 行,而不是整个文件作为一个Text
值。