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

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

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

认识

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

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

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

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

疑惑

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

Map 函数是啥?Reduce 函数又是啥?

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

统计大量文档中每一个单词出现的次数,这也是大数据技术入门的经典案例“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 初探的更多相关文章

  1. 谷歌MapReduce经典论文翻译(中英对照)

    MapReduce: Simplified Data Processing on Large Clusters(MapReduce: 简化大型集群下的数据处理) 作者:Jeffrey Dean and ...

  2. MapReduce初探

    转自 :http://blog.itpub.net/28912557/viewspace-1127423/ Map-Reduce处理过程(分析气象数据的map-reduce过程)1,调用标准的inpu ...

  3. 悟懂MapReduce,不纠结!

    在<谷歌 MapReduce 初探>中,我们通过统计词频的 WordCount 经典案例,对 Google 推出的 MapReduce 编程模型有了一个认识,但是那种认识,还只是停留在知道 ...

  4. 谷歌Dremel即时数据分析解决方案

    Hadoop技术已经无处不在.不管是好是坏,Hadoop已经成为大数据的代名词.短短几年间,Hadoop从一种边缘技术成为事实上的标准.看来,不仅现在Hadoop是企业大数据的标准,而且在未来,它的地 ...

  5. 【转】五分钟读懂大数据核心MapReduce架构及原理

    什么是MapReduce Hadoop中的MapReduce是一个简单的软件框架,基于它写出的应用程序可以运行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级数据 MapReduc ...

  6. 批处理引擎MapReduce编程模型

    批处理引擎MapReduce编程模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MapReduce是一个经典的分布式批处理计算引擎,被广泛应用于搜索引擎索引构建,大规模数据处理 ...

  7. Hadoop MapReduce 一文详解MapReduce及工作机制

    @ 目录 前言-MR概述 1.Hadoop MapReduce设计思想及优缺点 设计思想 优点: 缺点: 2. Hadoop MapReduce核心思想 3.MapReduce工作机制 剖析MapRe ...

  8. Hadoop的辉煌还能延续多久?

    摘要:Hadoop已经成为大数据的代名词.短短几年间,Hadoop从一种边缘技术成为事实上的标准.而另一方面,MapReduce在谷歌已不再显赫.当企业瞩目MapReduce的时候,谷歌好像早已进入到 ...

  9. 大数据技术原理与应用——大数据处理架构Hadoop

    Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构. Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以 ...

随机推荐

  1. 【5min+】AspNet Core中的全局异常处理

    系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...

  2. Intel优化Gen7驱动代码 Geekbench 5性能猛增

    Linux下缺少大量开发.支持是会导致各种奇葩的错误的,Intel日前就提交了一个代码修复,22nm Ivybridge及Haswell处理器的GeekBench 5的性能就提升了330%. 3.3倍 ...

  3. .NET写入文件操作

    2018-01-16  22:44:35 许多程序需要记录运行日志,这就需要将程序运行记录写入本机,一般是.txt 文本或.csv 文件.具体操作如下: 一.C#   using System.IO; ...

  4. 爬虫前奏——初谈Requests库

    什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其 ...

  5. 建议14:灵活使用Arguments

    Javascript支持Arguments机制.Arguments是一个为数组,可以通过数组下标形式获取该集合中传递给函数的参数值.例如:下面函数中,没有指定形参,但在函数体内通过Arguments对 ...

  6. centos下配置Nginx

    首先NGINX是一个高效的HTTP和反向代理的服务器,这里记录一下它的安装方式和文件结构方便以后查看.同时Linux系统具有灵活性,其他的东西可查看具体的官网信息:https://nginx.org/ ...

  7. Gorm 预加载及输出处理(三)- 自定义时间格式

    前言 Gorm 中 time.Time 类型的字段在 JSON 序列化后呈现的格式为 "2020-03-11T18:26:13+08:00",在 Go 标准库文档 - time 的 ...

  8. asp.net core 3.1 引用的元包dll版本兼容性问题解决方案

    自从.netcore 3.1出来后,大家都想立马升级到最新版本.我也是如此,微软也对.netcore 3.1的官方组件不断升级,几乎每隔几天就会有部分元包可以升级.每次打开Nuget包管理器,“更新” ...

  9. 部署harbor以https模式和k8s对接

    集群时间同步 我们在之前的kubeasz部署高可用kubernetes1.17.2 并实现traefik2.1.2部署篇已经实现了基于chrony的时间同步 [root@bs-k8s-master01 ...

  10. JS中iframe子页面与父页面之间通信

    iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head& ...