[大数据]由点入面了解MapReduce

一:MR的工作原理是什么?


1.从HDFS读取的文件进行split分片,split与block的对应关系可能是多对一,默认是一对一,每一片对应一个map。

2.在经过mapper的运行后,我们得知mapper的输出是这样一个key/value对;同时执行partitioner,每一个map对数据通过hash生成不同的key进行partition,决定数据对应的reduce,默认对key hash后再以reduce task数量取模。

3.map输出数据到内存缓冲区,当达到缓冲区阈值的时候,内存缓冲区默认是100MB,溢写的比例spill.percent默认是0.8,缓冲区的数据已经达到阈值即80M时就会往磁盘中spill,spill线程在把缓冲区数据写到磁盘前,会对它进行一个二次快速排序,首先根据所属的partition排序,然后在每个partition内再按key排序。如果client设置过combine,那么现在就是使用combine的时候了。将有相同key的key/value对的value加起来,减少溢写到磁盘的数据量,combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景,比如累加,最大值等。

4.当缓冲区的数据输出到磁盘后,可能会出现多个spill文件。然后对每个map的各个spill文件中取相同key的数据进行merge,这样保证每个map阶段输出的文件是按照key进行排序的,此时结果落在了磁盘上。因为merge是将多个溢写文件合并到一个文件,所以可能也有相同的key存在,在这个过程中如果client设置过combiner,也会使用combiner来合并相同的key。

5.reduce进程启动copy线程将数据从磁盘读取到内存缓冲区中,reduce 端可能从n个map的结果中获取数据,而这些map的执行速度不尽相同,当其中一个map运行结束时,reudce就会启动拉取,默认有5个线程从map端拉取数据。这里的缓冲区大小要比map端的更为灵活,它基于JVM的heap size设置,因为shuffle阶段reducer不运行,所以应该把绝大部分的内存都给shuffle用。当达到内存缓冲区阈值的时候启动内存到磁盘的merge生成溢写文件,这个过程中如果你设置有combiner,也是会启用的。

6.当属于该reduce的map输出都拷贝完成后,这时执行磁盘到磁盘的merge,最终输出一个整体有序的数据块。

7.然后就是Reducer执行,把结果放到HDFS上。

参考文献

http://langyu.iteye.com/blog/992916

http://blog.csdn.net/zhihaoma/article/details/42777653

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值