我使用Hadoop 2.6.0的Apache分發版。我知道映射器的輸出文件以每個映射器的格式'part-m-xxxxx'命名,reducer的輸出文件命名爲'part-r-xxxxx'。我正在試驗一個簡單的Max-Temperature用例,並且我沒有在Job配置中設置任何Reducer類。既然如此,是不是應該命名爲「part-m-xxxxx」的輸出文件?請找我下面主要類:爲什麼我的輸出文件名爲'part-r-xxxxx',即使我沒有提到任何reducer類?
public class MaxTemperature{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
Job job = new Job(conf, "Max Temperture");
job.setJarByClass(MaxTemperature.class);
int noOfInputPaths = args.length-1;
for (int i=0; i<noOfInputPaths; i++){
System.out.println("Adding Input path: "+args[i]);
FileInputFormat.addInputPath(job, new Path(args[i]));
}
System.out.println("Output path: "+args[args.length - 1]);
FileOutputFormat.setOutputPath(job, new Path(args[args.length - 1]));
job.setMapperClass(MaxTemperatureMapper.class);
//job.setReducerClass(MaxTemperatureReducer.class);
//job.setNumReduceTasks(3);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true)? 0 : 1);
}
}
設置OUTPUTFORMAT爲「NullOutputFormat.class」導致創建無輸出。我其實是想知道如何配置我的工作以這樣的方式,如果我的問題得到解決和相同的輸出提供使用映射器本身(比如,在我們都保證了方案的鑰匙將只一次作爲出現映射器輸入,那麼我猜這可能是可能的),那麼我們如何防止設置任何減速器任務並減少開銷。 –
另外,目前所產生的部分-R-00000的文件是不是空的,它包含排序但是未結合的輸出(通常爲映射器輸出)。我想這會是因爲我的地圖方法中有一個context.write()。 –