Hadoop显示的地图输入记录数与目录中所有文件中的行数不同

时间:2014-01-24 06:23:02

标签: linux hadoop

我正在试验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);
    }
}

这个计算结果可能是什么原因?

//编辑: 我相信这一切都可能是由于其中一些是二进制文件引起的。如果我使用基于文本的文件,一切都正确。

1 个答案:

答案 0 :(得分:1)

您指的是本地文件系统还是HDFS?输入/输出路径通常是后者。

其他调试提示:

  • 打印出M / R驱动程序内的路径。
  • for f in;做hadoop dfs -cat $ f | wc -l <​​/ li>