Hadoop深入理解之MapReduce

一 定义及由来
        MapReduce是一种计算模型也可以说是一种分布式运算程序的编程框架,它可以将大型数据处理任务分解成很多单个的、可以在服务器集群中并行执行的任务,而这些任务的计算结果可以合并在一起来计算最终的结果。简而言之,Hadoop Mapreduce是一个易于编程并且能在大型集群(上千节点)快速地并行得处理大量数据的软件框架,以可靠,容错的方式部署在商用机器上
        MPI等并行计算方法缺少统一的计算框架支持,程序员需要考虑数据存储、划分、分发、结果收集、错误恢复等诸多细节;为此,MapReduce设计并提供了同意的计算框架,为程序员隐藏了绝大多数系统层面的处理系统。
        总结一句话就是运用分而治之的原理实现了大数据的划分、计算与合并,并大大减轻了程序员的学习以及开发压力。

二 优缺点
        1.优点:易于编程,易于扩展,高容错,适合海量数据处理
        2.缺点:不擅长实时的计算,不擅长长流式计算,不擅长有向图计算
三 工作原理
        mapreduce分为两个阶段map 与 reduce;一个完整的mapreduce分为三个进程master,maptask,reducetask.
        1.map:字面意思映射,将数据映射成你想要的形式。拿到数据后由inputformat将数据切片,一按般块大小128M来切,切片是不考虑数据集整体会安文件逐个切然后交给maptask。一般maptask会尽量在数据本地运行,一个切片对应一个maptask,而一个maptask一般处理128M数据所以为了避免网络io按128M来切。生成k,v值交给Mapper(此时进入到shuffle阶段)。
        2.shuffle
        将其写入环形缓冲区,此时每个k,v都自带一个分区号,在缓冲区中将数据分区(按分区号排序)然后按key快排此时相当于将数据分组因为此时相同key数据挨在一起,缓冲区默认100M达到80%后自动溢出到文件然后将所有文件进行按分区归并排序。分区和reducetask没有必然联系,默认分区和reducetask数量相同,分区和reducetask对应,reducetask数量可以多于分区数量,但不能少而且分区号是从头开始逐一累加的。分区的意义就是告知数据应该归于哪一个reducetask处理。
        3.reduce:归并整合,reducetask将处理所有的maptask生成的相应分区的文件进行归并排序此时所有数据都是按key有序的,交给reducer然后输出。

附一张某机构的图供参考

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值