我正在试验Hadoop 2.2.0
,我创建了一个简单的唯一行标识符程序。目前我的程序接收一个目录,我相信地图应该从我在目录中指定的文件中传递。
然而,当我在我的linux机器上执行cat | wc -l
时,我看到我的计数是36063,但是当我的MapReduce
作业运行时,我看到了:Map input records=64974
。
这是单节点运行,我使用的是本地文件系统。
以下是我的Job
设置信息:
job.setInputFormatClass(TextInputFormat.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
这是我的Map
功能:
public class Map extends Mapper<LongWritable, Text, Text, NullWritable> {
private static final NullWritable nullWritable = NullWritable.get();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
context.write(value, nullWritable);
}
}
这个计算结果可能是什么原因?
//编辑: 我相信这一切都可能是由于其中一些是二进制文件引起的。如果我使用基于文本的文件,一切都正确。
答案 0 :(得分:1)
您指的是本地文件系统还是HDFS?输入/输出路径通常是后者。
其他调试提示: