首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

利用地图reduce求最大值

2012-09-06 
利用mapreduce求最大值??? ??? ??? ??? ??? ??? ??? + failed!)??? ??? ??? ??? ??? return??? ??? ?

利用mapreduce求最大值
??? ??? ??? ??? ??? ??? ??? + " failed!");
??? ??? ??? ??? ??? return;
??? ??? ??? ??? }
??? ??? ??? }

??? ??? ??? job.setMapOutputKeyClass(Text.class);
??? ??? ??? job.setMapOutputValueClass(LongWritable.class);
??? ??? ??? job.setOutputKeyClass(Text.class);
??? ??? ??? job.setOutputValueClass(LongWritable.class);
??? ??? ??? job.setMapperClass(MyMapper.class);
??? ??? ??? job.setReducerClass(MyReducer.class);

??? ??? ??? job.setNumReduceTasks(2);
??? ??? ??? FileInputFormat.addInputPath(job, inputPath);
??? ??? ??? FileOutputFormat.setOutputPath(job, outputPath);

??? ??? ??? long begin = System.currentTimeMillis();
??? ??? ??? job.waitForCompletion(true);

??? ??? ??? System.out.println("=========================================");
??? ??? ??? System.out.println("Spend time:"
??? ??? ??? ??? ??? + (System.currentTimeMillis() - begin));

??? ??? } catch (Exception e) {
??? ??? ??? // TODO Auto-generated catch block
??? ??? ??? e.printStackTrace();
??? ??? }
??? }

}

运行结果:
随机生成的10000个数字被写入文件VInput中,找出的最大值结果写入VOutput文件夹下的生成文件(part-r-0000)中,格式为:"maxValue? XXXX".其中XXXX表示所找到的最大值。

遇到比较难解的问题:
①将MyMapper和MyReducer作为内部类写在类MaxValue中时,报错初始化错误。
解决方案:将MyMapper和MyReducer作为单独的类拿出来,分成三个类。
②报错java.lang.NoClassDefFoundError
解决方案:将hadoop/lib下的相应的jar包添加到工程里面去 (单单把hadoop文件夹下的几个jar包加进去是不够的,还要把lib文件夹下相对应的jar包导入)

实验心得:①map阶段和reduce阶段都有键/值对作为输入和输出,并且他们的类型可由程序员选择。②map函数的输出先由MapReduce框架处理,然后再被发送到reduce函数。这一处理过程根据键来对键/值对进行排序和分组。?③MapReduce作业(job)是客户端执行的单位:它包括输入数据、mapreduce程序和配置信息。Hadoop通过把作业分成若干个小任务(task)来工作,其包括两种类型的任务:map任务和reduce任务。④有两种类型的节点控制着作业运行过程:jobtracker和多个tasktracker。jobtracker通过调度任务在tasktracker上运行,来协调所有运行在系统上的作业。Tasktracker运行任务的同时,把进度报告传送到jobtracker,jobtracker则记录着每项任务的整体进展情况。?⑤Hadoop把输入数据划分成等长的小数据发送到MapReduce,成为输入分片(input split)或分片。Hadoop为每个分片创建一个map任务,由它来运行用户自定义的map函数来分析每个分片中的记录。??

热点排行