分布式计算的基础:MapReduce
Posted 给产品经理讲技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式计算的基础:MapReduce相关的知识,希望对你有一定的参考价值。
小长假归来,发现世界的另一边又搞出了大新闻,整出个「巴拿马文件泄漏事件,某个律师行泄漏了2.6TB的机密信息。
假设产品经理听到这个消息后,提出这么一个需求:分析这2.6TB的数据,找出其中最热的10个人名。这个需求看起来很简单,无非就是先读取文件,做一下分词处理,找出其中的人名,再累加计数,最后得出计数最多的人名。可是,这里有2.6TB的数据诶,如果处理速度是1MB/s,那么也得算个31.5天,等到那个时候,也许产品经理已经忘记了这个需求:)
为了不让产品经理忘记这个需求,那我们得加快处理速度了,一台机器处理不过来,那我们就堆机器吧,上个100台机器,总能在一天之内搞定吧。那么面对这100台机器,该如何分配任务,以及如何收集处理结果呢?这程序该怎么写呢?这就祭出今天要说的MapReduce了。
MapReduce是由Google提出的一个分布式计算模型,简单的说,就是把大量的数据分解成独立的单元执行(Map),然后将结果归并在一起(Reduce)。
面对上面的需求,首先需要做的事将任务分解了(Map)。可以有这样的一个独立的小任务,以单个文件作为一个输入,然后经过分词、人名筛选等处理后,得到很多Key-Value形式的键值对,这里的Key就是某个人名(张三),Value就是张三在这个文件中出现的次数。这种独立小任务的处理方式,对于2.6TB中的文件都是一模一样的,那么我们就把这些文件统统分配到其中90台机器上去单独执行这些小任务就好了。
另外10台机器干嘛呢?它们就负责Reduce,将计算结果归并起来,当前面90台机器处理完一个文件了,它就将处理结果扔给这10台机器。扔结果可不是乱扔掉哦,它有一个原则,相同Key的结果都往同一台机器上扔,如下图中画的那样,蓝色的处理结果,都扔给了第一台机器,这样它就保证了同一个Key的数据完整性。
最终,从全部Reduce的机器上,可以获得每个名字在这2.6TB数据中出现的统计结果,将其中次数最多的前10个列出来,就得到了我们想要的结果了。
说到底就是将大量重复独立的任务,分摊到不同的机器上去执行,分担了整体运行的时间。
这样搞了,只要7个多小时,产品经理就能拿到他要的数据了。还想更快,那就继续堆机器吧,哈哈~
以上是关于分布式计算的基础:MapReduce的主要内容,如果未能解决你的问题,请参考以下文章