【干货】 解密MapReduce(上集)

digest [复制链接]
发表于 : 2018-12-29 11:01:36 最新回复:2019-01-02 09:18:26
393 1

我学**数据有这样一个感悟:IT的智慧体现在算法上,而算法的灵感就来源于生活。什么意思,我们一起来看看MapReduce做离线计算到底是怎么一回事儿!要理解这个过程,我们先请出一个秘密武器:


1


大家都玩过扑克牌吧?没有玩过至少见过吧?现在有两幅扑克牌无序的堆成一摞放在桌子上。四个人玩牌,玩牌之前呢,他们要看看每一种花色的牌是否完整?请问大家,用什么方式最快?


——正确答案:把牌分成4摞,每个人拿一摞,拿到牌之后每个人把自己手里的牌按照红黑花梅的花色分堆,大家都分好之后再按照花色把四个人手中的牌整合到一起。红桃一摞,黑桃一摞,以此类推。到此为止,我们就已经成功的将两幅混乱的扑克牌按花色分成四摞了。然后呢,每个人去这四摞牌里面拿到一种花色,从最小排到最大,去清点自己手里的花色是否完整!


2


哈哈,其实这就是一个离线计算的过程。离线计算的过程分为两个阶段,首先是Map的阶段,就是我们最开始的时候把混乱的扑克牌分成4摞,每个人去拿一摞将其一张一张的分开的过程就是Map。分开之后,我们检查花色,并且按照花色将其分堆,这就是一个Partition的过程。


Partition完成之后呢?我们每个人的手上保存了4摞分好了花色的牌,这时候就进入了我们的Reduce阶段,进入Reduce阶段之后做些什么呢?首先要把每个人手里分好的牌按照花色整合到一起,然后再对整合好的每一摞牌进行检查。最后分别输出检查结果。我们具体拿一些数据来分析一下这个过程。


3


OK,看这里,input是我们要处理的数据,这是一个文本文档。我们需要做什么呢?我们把它送到MapReduce模块里边,需要得到如右边所示的结果。统计出来每个单词出现的词数。MapReduce怎么做呢?既然是集群模式,我肯定要把任务分配给不同的服务器对吧?假设我现在把文件分成3块(文件怎么划分呢?),文件分成几个块,就会在集群当中启动几个Map进程。每个进程拿到一块数据,接下来它会怎么做呢?


——正确答案:Map要对拿到的数据做一个处理,然后每个Map把处理结果交给Reduce,让Reduce去做一个统计,对吧?那么,Map先会将一行数据按空格键切分,变成若干个单词,然后单词每出现一次,计数为1,用一个键值对装起来。图片解析奉上~~~


4


计算好之后呢Map还要做一件事情,在数据量很多的情况下,我们一般还会让Map做一个单词的统计。因为如果不做单词统计的话,它就会把这一堆<hello,1>,<world,1>,直接交给Reduce,所有Map的统计结果都要通过网络传输给特定的起Reduce进程的服务器,这样子的话会造成不同服务器之间数据传输的量很大。所以Map会把每一个单词出现了多少次统计出来,比如hello出现了1次,world出现了2次这样子。最后每一个Map都把自己手头的任务计算完毕了,就把结果存储起来,接下来就轮到Reduce上场啦!


5


在Map存储结果的过程当中,Reduce就会被启动,Reduce启动以后会去拿Map处理的结果,当有多个Reduce的时候,Reduce不会把全部的结果都读取回来,而是只读取属于自己的分区,即分区Partition。什么叫做分区呢?分区就是对Map计算的结果做的一个分类,有多少Reduce,我就把结果分成多少类,也就是多少个分区。这是通过一个算法来完成的,这个算法是怎么回事,我们后面会做一个细节补充。


我们先以4个Reduce为例(一般情况下Reduce的个数少于Map的个数),假设每一个不同的单词刚刚好对应一个不同的分区。那么Reduce拿到的数据就是我们图中所示的样子。Reduce对多个Map的计算结果做了一个整合,它还是一个一个的键值对,键是我们的单词,但是值呢变成了由每一个Map提交的计算结果组成的集合。Reduce要做的就是把这些集合里面的值加起来,得到最后的结果,也就是在整个文档里面,每个单词出现了多少次。


这样说起来是不是很简单呢?因为还有很多的细节我留在了<下集>中跟大家补充哦!大家是否对MapReduce的具体执行流程开始感兴趣啦?


欲知详情如何,请听下回分解!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
  • x
  • 常规:

点评 回复

QQ:3063089331
跳转到指定楼层
Becky_2019
Becky_2019  管理员 发表于 2019-1-2 09:18:26 已赞(0) 赞(0)

确实很通俗易懂,我一个外行都看懂了,感谢分享,O(∩_∩)O~
  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录