经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Hadoop » 查看文章
Mapreduce概述和WordCount程序
来源:cnblogs  作者:给你一个公主抱  时间:2019/3/25 9:11:02  对本文有异议

一、Mapreduce概述

  Mapreduce是分布式程序编程框架,也是分布式计算框架,它简化了开发!

  Mapreduce将用户编写的业务逻辑代码和自带默认组合整合成一个完整的分布式运算程序,并发的运行在hadoop集群上。

 

二、Mapreduce优缺点

  优点:1.易于编程只用实现几个接口即可完成一个并发的程序。

     2.良好的拓展性:再不行当前程序运行的情况下,可以通过增加节点来解决用户/数据扩展,计算量增加的问题。

     3.高容错性:可以运行在廉价的集群机器上。

     4.适合处理PB级别以上的离线处理。

  缺点:1.不擅长做实时计算、流式计算。

     2.不支持DAG(有向图)计算,有依赖的程序(spark支持)。

     3.每次把计算结果写入磁盘当中,造成磁盘io,性能较低。

 

三、Mapreduce编程思想

  需求:统计一个200M的单词文件,查询出每个单词出现的次数。

  思想:1.将200M的文件切分为两块,128M和72M;

     2.将两块文件分别交给两个maptask处理,对数据进行读取,切分,封装,然后传输到reducetask;

     3.reducetask将数据再次整合,累加,输出到结果文件中。

  注意:mapreduce中的所有maptask都是并行运行的,reducetask也是,

    但是reducetask的运行要依赖maptask的输出。

 

四、WordCount程序

  1. /**
  2. * @author: PrincessHug
  3. * @date: 2019/3/24, 0:52
  4. * @Blog: https://www.cnblogs.com/HelloBigTable/
  5. */
  6. public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
  7. @Override
  8. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  9. //读取数据
  10. String line = value.toString();
  11.  
  12. //切分数据
  13. String[] fields = line.split(" ");
  14.  
  15. //传输数据
  16. for (String f:fields){
  17. context.write(new Text(f),new IntWritable(1));
  18. }
  19. }
  20. }
  21.  
  22. public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {
  23. @Override
  24. protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  25. //累加
  26. int sum = 0;
  27. for (IntWritable i:values){
  28. sum += i.get();
  29. }
  30. //输出
  31. context.write(key,new IntWritable(sum));
  32. }
  33. }
  34.  
  35. public class WordCountDriver {
  36. public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
  37. //配置,job对象
  38. Configuration conf = new Configuration();
  39. Job job = Job.getInstance();
  40.  
  41. //设置运行类
  42. job.setJarByClass(WordCountDriver.class);
  43.  
  44. //设置Mapper,Reducer类
  45. job.setMapperClass(WordCountMapper.class);
  46. job.setReducerClass(WordCountReducer.class);
  47.  
  48. //设置Mapper输出数据类型
  49. job.setMapOutputKeyClass(Text.class);
  50. job.setMapOutputValueClass(IntWritable.class);
  51.  
  52. //设置Reducer输出数据类型
  53. job.setOutputKeyClass(Text.class);
  54. job.setOutputValueClass(IntWritable.class);
  55.  
  56. //设置输入输出流
  57. FileInputFormat.setInputPaths(job,new Path("G:\\mapreduce\\wordcount\\in"));
  58. FileOutputFormat.setOutputPath(job,new Path("G:\\mapreduce\\wordcount\\out"));
  59.  
  60. //提交任务
  61. if (job.waitForCompletion(true)){
  62. System.out.println("运行完成!");
  63. }else {
  64. System.out.println("运行失败!");
  65. }
  66.  
  67. }
  68.  
  69. }

  

原文链接:http://www.cnblogs.com/HelloBigTable/p/10586669.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号