Reduce 程序
mapreduce从它名字上来看就大致可以看出个缘由,两个动词map和reduce,“map(展开)”就是将一个任务分解成为多个任务,“reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。如类对继承父类的方法不满意,是可以重写父类的继承的方法的,当调用方法时会优先调用子类的方法。
清单 15. Reduce 程序
- public class CharCountReducer extends Reducer< Text, LongWritable, Text, LongWritable> {
- @Override
- protected void reduce(Text key, Iterable< LongWritable> values, Context context)
- throws IOException, InterruptedException {
- long count = 0;
- for (LongWritable value : values) {
- count += value.get();
- }
- context.write(key, new LongWritable(count));
- }
- }
驱动程序
到目前为止,我们已经有了 map 程序和 reduce 程序,我们还需要一个驱动程序来运行整个作业。可以看到我们在这里初始化了一个 Job 对象。Job 对象指定整个 MapReduce 作业的执行规范。我们用它来控制整个作业的运作,在这里我们指定了 jar 包位置还有我们的 Map 程序、Reduce 程序、Map 程序的输出类型、整个作业的输出类型还有输入输出文件的地址。
清单 16. 驱动程序
- public class CharCountDriver {
- public static void main(String[] args) throws Exception {
- Configuration configuration = new Configuration();
- Job job = Job.getInstance(configuration);
- // Hadoop 会自动根据驱动程序的类路径来扫描该作业的 Jar 包。
- job.setJarByClass(cn.itweknow.mr.CharCountDriver.class);
- // 指定 mapper
- job.setMapperClass(CharCountMapper.class);
- // 指定 reducer
- job.setReducerClass(CharCountReducer.class);
- // map 程序的输出键-值对类型
- job.setMapOutputKeyClass(Text.class);
- job.setMapOutputValueClass(LongWritable.class);
- // 输出键-值对类型
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(LongWritable.class);
- // 输入文件的路径
- FileInputFormat.setInputPaths(job, new Path(args[0]));
- // 输入文件路径
- FileOutputFormat.setOutputPath(job, new Path(args[1]));
- boolean res = job.waitForCompletion(true);
- System.exit(res?0:1);
- }
- }
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-94214-6.html
但伊拉克必须要只效忠美国且永远不许对他国抛媚眼示好
炒股能致富