在《Hadoop:权威指南》一书中,有一个示例程序,代码如下。
JobConf conf = new JobConf(MaxTemperature.class);
conf.setJobName("Max temperature");
FileInputFormat.addInputPath(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
conf.setMapperClass(MaxTemperatureMapper.class);
conf.setReducerClass(MaxTemperatureReducer.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
MR框架应该能够从Mapper和JobConf类上设置的Reduce函数中找出输出键和值类。为什么我们需要在JobConf类上显式设置输出键和值类?此外,对于输入键/值对也没有类似的 API。
原因是类型擦除[1]。您将输出 K/V 类设置为泛型。在作业设置期间(运行时,而不是编译时),这些泛型将被删除。
输入 k/v 类可以从输入文件中读取,对于 SequenceFiles,类位于标题中 - 您可以在编辑器中打开序列文件时读取它们。
必须编写此标头,因为每个映射输出都是一个 SequenceFile,因此您需要提供类。
[1] http://download.oracle.com/javase/tutorial/java/generics/erasure.html http://download.oracle.com/javase/tutorial/java/generics/erasure.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)