Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Hadoop显示的映射输入记录数与目录中所有文件中的行数不同_Linux_Hadoop - Fatal编程技术网

Linux Hadoop显示的映射输入记录数与目录中所有文件中的行数不同

Linux Hadoop显示的映射输入记录数与目录中所有文件中的行数不同,linux,hadoop,Linux,Hadoop,我正在试验Hadoop 2.2.0,并创建了一个简单的唯一行标识符程序。目前,我的程序接收一个目录,我认为应该从我在目录中指定的文件中传递映射 然而,当我在linux机器上执行cat | wc-l时,我看到我的计数是36063,但当我的MapReduce作业正在运行时,我看到:Map input records=64974 这是一个单节点运行,我使用的是本地文件系统 这是我的作业设置信息: job.setInputFormatClass(TextInputFormat.class); job.s

我正在试验Hadoop 2.2.0,并创建了一个简单的唯一行标识符程序。目前,我的程序接收一个目录,我认为应该从我在目录中指定的文件中传递映射

然而,当我在linux机器上执行
cat | wc-l
时,我看到我的计数是36063,但当我的
MapReduce
作业正在运行时,我看到:
Map input records=64974

这是一个单节点运行,我使用的是本地文件系统

这是我的
作业
设置信息:

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);
    }
}
公共类映射扩展映射器{
private static final nullwriteable nullwriteable=nullwriteable.get();
@凌驾
受保护的void映射(LongWritable键、文本值、上下文)引发IOException、InterruptedException{
write(值,可空写);
}
}
是什么原因导致这次清点被取消

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

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

其他调试提示:

  • 打印出M/R驱动程序内的路径
  • 对于f-in;hadoop dfs-cat$f | wc-l

本地文件系统,我在问题中添加了它。我已验证扫描的文件数是否相同。好的,请在下一个疑难解答步骤中验证文件系统URI、每个文件的路径以及它们的大小。很抱歉我的无知,但这是什么意思?我已经验证了每个文件的路径是否正确。我的Hadoop作业在解析时会打印出文件名。我还没有核实尺寸。你建议我如何在Hadoop中获得文件大小?接下来我想到的是确保文件是相同的。实际上更好:对内容进行md5校验和。如果可以,我会这样做。那是个好主意。一个问题:当Hadoop按行分割文件时,它会将什么作为分隔符?我正在处理的大多数文件都是XML,因此一行应该是
\r\n