我为hadoop0.20.2编写了一个简单的map任务,输入数据集由44个文件组成,每个文件大约3-5mb。任何文件的每一行都有其格式 int,int
. 默认为输入格式 TextInputFormat
Map器的工作是解析输入 Text
变成整数。
任务运行后,hadoop框架的统计显示map任务的输入记录数只有44条。我试着调试,发现方法的输入记录 map
只是每个文件的第一行。
有人知道问题是什么吗?我在哪里能找到解决办法?
提前谢谢你。
编辑1
输入数据由不同的map reduce任务生成,其输出格式为 TextOutputFormat<NullWritable, IntXInt>
. 这个 toString()
方法 IntXInt
应该给出一系列 int,int
.
编辑2
我的Map器如下所示
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
我刚刚检查过,Map程序实际上只读取每个文件的一行,而不是整个文件作为一个整体 Text
价值观。
2条答案
按热度按时间rseugnpd1#
inputformat定义如何将数据从文件读取到Map器示例中。默认的textinputformat读取文本文件的行。它为每条记录发出的键是读取的行的字节偏移量(作为可长写的),值是行的内容,直到终止的'\n'字符(作为文本对象)。如果有多行记录,每条记录之间用$字符分隔,您应该编写自己的inputformat,将文件解析为按此字符拆分的记录。
lf3rwulv2#
我怀疑你的Map器会把所有文本作为输入并打印输出。你能给我看一下你的Map器类和Map器函数的定义吗?即
我想知道这一行是否有不同之处