2015-07-20 131 views
1

我在Hadoop中遇到了一个相当奇怪的问题。Hadoop作业刚刚结束

我写了一个MR作业,就像那样结束,而不执行映射或减少代码。它生成输出文件夹,但该文件夹是空的。我没有看到这种行为的理由。

我甚至试着用默认的Mapper和Reducer来找到问题,但我没有例外,没有错误,工作刚刚结束并产生一个空文件夹。这里是最简单的驱动程序:

Configuration conf = new Configuration(); 

    //DistributedCache.addCacheFile(new URI(firstPivotsInput), conf); 

    Job pivotSelection = new Job(conf); 
    pivotSelection.setJarByClass(Driver.class); 
    pivotSelection.setJobName("Silhoutte"); 

    pivotSelection.setMapperClass(Mapper.class); 
    pivotSelection.setReducerClass(Reducer.class); 

    pivotSelection.setMapOutputKeyClass(IntWritable.class); 
    pivotSelection.setMapOutputValueClass(Text.class); 

    pivotSelection.setOutputKeyClass(IntWritable.class); 
    pivotSelection.setOutputValueClass(Text.class); 

    FileInputFormat.addInputPath(pivotSelection, new Path("/home/pera/WORK/DECOMPRESSION_RESULT.csv")); 
    FileOutputFormat.setOutputPath(pivotSelection, new Path("/home/pera/WORK/output")); 

    pivotSelection.setNumReduceTasks(1); 

    pivotSelection.waitForCompletion(true); 

在这样一个简单的例子中会出现什么问题?

回答

0

最简单的解释是输入路径("/home/pera/WORK/DECOMPRESSION_RESULT.csv")在HDFS上不包含任何东西。您可以通过MAP_INPUT_RECORDS计数器的值来验证。您还可以使用hadoop dfs -ls /home/pera/WORK检查HDFS上此文件的大小,或者您甚至可以通过hadoop dfs -cat /home/pera/WORK/DECOMPRESSION_RESULT.csv | head查看此文件的前几行。 (或者-text而不是-cat如果它被压缩)。

另一个问题可能是reducer有一个特殊的(if)条件,对于每个映射器的输出都会失败,但这不适用于身份映射器和reducer,所以我相信这种情况是前者。

+0

谢谢你的回答,但它确实有条目,它在本地文件系统上,我正在通过IDE以独立模式运行它?另外,当我尝试自定义映射器并在设置方法中设置断点时也会发生同样的情况。像我没有设置映射器。 – Marko

+0

@pera但它仍然应该在HDFS上。尝试把它放在那里,看看它是否运行 – vefthym