欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

谷歌 MapReduce 初探

程序员文章站 2022-04-13 09:22:53
谷歌“三驾马车”的出现,才真正把我们带入了大数据时代,毕竟没有谷歌,就没有大数据。 上次的分享,我们对谷歌的其中一驾宝车 GFS 进行了管中窥豹,虽然只见得其中一斑,但是也能清楚的知道 GFS 能够把大量廉价的普通机器,聚在一起,充分让每台廉价的机器发挥光和热,不但降低了运营成本,而且解决了一个业界 ......

谷歌“三驾马车”的出现,才真正把我们带入了大数据时代,毕竟没有谷歌,就没有大数据。

谷歌 MapReduce 初探

上次的分享,我们对谷歌的其中一驾宝车 gfs 进行了管中窥豹,虽然只见得其中一斑,但是也能清楚的知道 gfs 能够把大量廉价的普通机器,聚在一起,充分让每台廉价的机器发挥光和热,不但降低了运营成本,而且解决了一个业界数据存储的难题。

虽然 gfs 解决了 google 海量数据的存储的难题,但是随之而来的就是“如何从海量数据中快速计算并得到结果的难题”,面对这个难题,谁痛谁想办法,google 再次进行技术创新,重磅推出另一篇论文《mapreduce: simplified data processing on large clusters》,接下来就一起认识认识 mapreduce。

认识

到底是个啥?说白了,mapreduce 其实就是一个为了简化海量数据处理而提出的编程模型。

主要思想:分而治之,将一个大规模的问题,分成多个小规模的问题,把多个小规模问题解决,然后再合并小规模问题的解,就能够解决大规模的问题。

编程模型:我们只需要通过编写 map 函数reduce 函数来指定想要进行的计算,而不用花心思去纠结背后复杂的容错、数据分发、负载均衡等等一系列技术细节问题mapreduce 所执行的分布式计算会以一组键值对作为输入,输出另一组键值对。

怎么想的?原来是受 lisp 以及其它一些函数式编程语言中的 map 和 reduce 原语影响而来的(如果你闲着无聊,再去了解 lisp 也不迟)。

疑惑

百思要求解。说了这么多,感觉还是一无所知,显然是一块硬骨头,其实在脑海中早已荡起千层疑问的波。

map 函数是啥?reduce 函数又是啥?

接下来我们一起慢慢去体会。

谷歌 MapReduce 初探统计大量文档中每一个单词出现的次数,这也是大数据技术入门的经典案例“wordcount”,此时需要我们编写类似上面的伪代码。

简单剖析这段伪代码,希望对 map、reduce 函数有一个深入的认识。

剖析 1:要统计文档每个单词出现的次数,顾名思义 map 函数入参 key 是文件名,value 是文档的内容,接下来逐个遍历单词,每遇到一个单词 w,就输出一个中间结果(w, "1")。

剖析 2:reduce 函数入参 key 就是单词 w,值是一串“1”,然后将这些“1”累加就得到单词 w 的出现次数。

剖析 3:最后把文档中单词的出现次数,输出到用户定义的位置,例如存储到分布式存储系统 gfs 上。

好了,大数据入门经典案例“wordcount”的伪代码,到这就剖析个八九不离十,虽然懵懂了不少,但是还是萌生了一些猜想和疑问。

 

懵懂:map 函数是啥?reduce 函数是啥?

map函数:处理一个基于 key/value 键值对的数据集合,同时也输出基于 key/value 的数据集合;

reduce函数:用来合并 map 函数输出的 key/value 数据集合。

论文中说了,上面伪代码中输入输出虽然都是字符串类型的,但事实上,map 和 reduce 函数都是有相应类型的。

  • map     (k1, v1)      -> list(k2, v2)

  • reduce   (k2, list(v2))  -> list(v2)

猜想:map、reduce 函数中间感觉又触发了“针对同一个单词的 value 的组合(也就是把相同单词出现的次数,串在一起)”,不然 reduce 函数怎么能接收到 values(每个单词对应的出现次数的一串“1”)。

骑驴看剧本,咱们还是走着瞧呗。

疑问1:map 产生的中间键值对,是放到内存、本地磁盘还是放到了 gfs 上存储?

这个问题也是骑驴看剧本,咱们还是走着瞧呗(貌似用错了语境,别介意,哈哈)。

疑问2:我们写好了 map 函数和 reduce 函数,怎么就跑到了多台机器上呢?

欲知后事如何,咱们还是且听下回分解。

谷歌 MapReduce 初探