我对Hadoop有一个相当奇怪的问题。
我写了一个MR作业,就像这样结束,不执行map或reduce代码。它生成输出文件夹,但该文件夹为空。我认为没有理由这样做。
我甚至尝试使用默认的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 :(得分: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)条件,对于每个mapper的输出都失败了,但是在identity mapper和reducer的情况下不应该这样,所以我相信这个例子是前者一。