我正在使用Hadoop 2.6.0的Apache发行版。我知道每个映射器的映射器输出文件都以“part-m-xxxxx”格式命名,而每个简化器的简化器输出文件都被命名为“part-r-xxxxx”。我正在尝试一个简单的Max-Temperature用例,但尚未在Job配置中设置任何reducer类。是这种情况,输出文件不应该被命名为“part-m-xxxxx”吗?请在下面找到我的主类:
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);
}
}
最佳答案
如果MapReduce程序员未使用job.setReducerClass设置Reducer类,则将IdentityReducer.class
用作默认值。
如果您只想对输入进行排序。例如,身份还原器可用于实现令人尴尬的并行算法,在该算法中,您仅使用映射器执行并行任务,但希望对输出键值对进行排序。输出将是part-r-xxxxx。
如果您设置
job.setNumReduceTasks(0);
在这种情况下, reducer 将不会运行,程序的输出将命名为part-m-xxxxx。输出将不排序。
关于java - 为什么我的输出文件都命名为 'part-r-xxxxx',尽管我没有提到任何reducer类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32030260/