MapReduce计算框架初体验!!

1.1.理解MapReduce思想
MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。
Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reduce负责“合”,即对map阶段的结果进行全局汇总。
这两个阶段合起来正是MapReduce思想的体现。
在这里插入图片描述
MapReduce最大的亮点在于通过抽象模型和计算框架把需要做什么(what need to do)与具体怎么做(how to do)分开了,为程序员提供一个抽象和高层的编程接口和框架。程序员仅需要关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的程序代码

需求:计算每一行偏移量的总和

27 41 39 29 51 45 24 28 56 52 29 51 18 25 19 10 52 37 18 25 23 52 19 33 59 24 39 58 51 12 

44 10 42 19 35 28 39 33 58 45 28 35 26 55 32 33 27 40 10 31 42 15 41 56 42 47 40 45 28 52 

52 28 50 12 42 28 17 50 31 33 42 14 34 19 23 22 40 21 54 43 52 29 38 53 34 28 11 15 25 44 

27 27 43 58 24 12 33 45 39 43 19 57 38 55 54 29 28 58 36 44 59 26 27 21 31 55 29 53 39 38 

58 52 46 37 20 49 10 28 15 24 35 38 14 44 59 48 42 18 59 38 43 23 19 28 30 24 36 10 30 15 

1.2编写MapReduce计算框,程序员仅仅只需要编写Map和Reduce后在编写驱动使整体串联即可
在这里插入图片描述
1.3创建3个类分别表示Map、Reduce、驱动。先编写WordCountMap实现

1、实例一个class 继承Mapper<输入的key的数据类型,输入的value的数据类型,输出的key的数据类型,输出的
value的数据类型,> 2、重写map方法 map(LongWritable key, Text value, Context context)
key: 行首字母的偏移量
value: 一行数据
context:上下文对象
3、根据业务需求进行切分,然后逐一输出
在这里插入图片描述
1.4WordCountReduce实现
1、实例一个class 继承Reducer<输入的key的数据类型,输入的value的数据类型,输出的key的数据类型,输出的
value的数据类型,> 2、重写reduce方法 reduce(LongWritable key, Iterable values, Context context)
key: 去重后单词
values: 标记的1(好多个1,key出现几次就有几个1)
context:上下文对象
3、遍历values 进行汇总计算
在这里插入图片描述
1.5实现WordCountDriver驱动步骤:

//实列一个Job 对象
//指定本次Job运行的主类
//指定本次Job 实现的mapper 和 reduce 类
//指定本次Job map输出的类型
//指定本次Job reduce输出的类型
//指定数据读取输入路径 和程序运行后结果输出的存放路径
//提交Job

public class WordCountDriver {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //实列一个Job 对象
        Job job=Job.getInstance(new Configuration());

        //指定本次Job运行的主类(提交集群不会报错)
        job.setJarByClass(WordCountDriver.class);

        //指定本次Job 实现的mapper 和 reduce 类
        job.setMapperClass(WordCountMap.class);
        job.setReducerClass(WordCountReduce.class);

        //指定本次Job map输出的类型
        job.setMapOutputKeyClass(LongWritable.class);
        job.setMapOutputValueClass(LongWritable.class);

        //指定本次Job reduce输出的类型
        job.setOutputKeyClass(LongWritable.class);
        job.setOutputValueClass(LongWritable.class);

         //指定数据读取输入路径  和程序运行后结果输出的存放路径
        long startTime = System.currentTimeMillis();  //获取开始时间
        FileInputFormat.setInputPaths(job,"D:\\Testc\\input\\data.txt");
        FileOutputFormat.setOutputPath(job,new Path("D:\\Testc\\output2"));

         //提交Job
        boolean b = job.waitForCompletion(true);
        long endTime = System.currentTimeMillis();  //获取结束时间
        System.out.println("程序运行时间"+(endTime-startTime)+"ms");
        System.exit(b ? 0:1);


    }
}

正常运行结果如下
在这里插入图片描述
,在查看指定路径结果在这里插入图片描述
表明成功在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值