【这是一猿小讲的第 63 篇原创分享】

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

上次的分享《从谷歌 GFS 架构设计聊开去》,我们对谷歌的其中一驾宝车 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 函数,怎么就跑到了多台机器上呢?

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

推荐阅读:

从谷歌 GFS 架构设计聊开去

从经典的一道菜“京酱肉丝”聊懂集群分布式

监控实战Prometheus+Grafana

谷歌 MapReduce 初探相关推荐

  1. 谷歌MapReduce论文学习

    MapReduce: Simplified Data Processing on Large Clusters MapReduce:简化数据流程在大规模集群中 目录: 1.Abstract 摘要 2. ...

  2. 悟懂MapReduce,不纠结!

    [这是一猿小讲的第 65 篇原创分享] 在<谷歌 MapReduce 初探>中,我们通过统计词频的 WordCount 经典案例,对 Google 推出的 MapReduce 编程模型有了 ...

  3. 定期总结,及时复盘,三省吾身。

    岁月蹉跎,时不我待.不知不觉,2020 年,上半年快过去啦. 今天,花几分钟,对这段时间分享的 100 多篇原创文章,进行整理,以便大家阅读,如果你错过一些精彩的文章,今天绝对是一个补票的好机会.点击 ...

  4. 第五章-分布式并行编程框架MapReduce

    第五章-分布式并行编程框架MapReduce 文章目录 第五章-分布式并行编程框架MapReduce MapReduce概述 分布式并行编程 MapReduce模型和函数 MapReduce体系结构 ...

  5. 谷歌大数据的三驾马车

    本文介绍大数据分析的鼻祖型论文"谷歌三驾马车".这包括处理分布式数据的mapreduce.存储大量数据的gfs以及列式存储bigtable,当前流行的大数据技术都是在谷歌发表了这三 ...

  6. Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路

    Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路 Doug Cutting,凭借自己对工作的热情和脚踏实地的态度,开创了Lucene和Nutch两个成功的开源搜索引擎项目 ...

  7. [渝粤教育] 厦门大学 大数据技术原理与应用 参考 资料

    教育 -大数据技术原理与应用-章节资料考试资料-厦门大学[] 第1章 大数据概述 单元测验 1.[单选题]第三次信息化浪潮的标志是: A.个人电脑的普及 B.互联网的普及 C.云计算.大数据.物联网技 ...

  8. Hadoop生态系统功能组件,主要包括哪些?

    经过多年的发展,Hadoop生态系统不断完善和成熟,目前已经包括了多个子项目,除了核心的HDFS和MapReduce以外,Hadoop生态系统还包括要ZoopKer.HBase.Hive.Pig.Ma ...

  9. 大数据技术原理与应用课后题(林子雨)

    大数据技术原理与应用(林子雨) 第1章 大数据概述 1单选(2分) 第三次信息化浪潮的标志是: A.个人电脑的普及 B.云计算.大数据.物联网技术的普及 C.虚拟现实技术的普及 D.互联网的普及 正确 ...

最新文章

  1. TCP/IP 四次断开
  2. Java数据结构和算法:HashMap的实现原理
  3. KMP算法的Next数组详解(转)
  4. html制作固定列的表格,带固定列的简单HTML表格
  5. Spring Boot——获取上传文件的MD5值解决方案
  6. python调用浏览器全屏_javascript、js将页面全屏的方法(兼容多浏览器)
  7. SIP可靠性(SIP Reliability)
  8. C#结构体和字节数组的转换
  9. cf244D. Match amp; Catch 字符串hash (模板)或 后缀数组。。。
  10. 利用jemalloc分析内存泄漏以及LD_PRELOAD
  11. expec不管异常 try_JUnit测试异常
  12. 为什么模板函数的声明和实现都放在.h文件中
  13. CCNA学习资料简介
  14. Flink学习之flink sql
  15. linux系统商店下载的软件到哪了,linux下使用第三方商店安装应用
  16. 【毕业设计】图像识别-人脸识别与疲劳检测 - python opencv
  17. python图像平移_仿射变换——图像平移 原理讲解及python实现
  18. poi设置单元格下拉下表
  19. linux编程常用指令
  20. 三季度现货白银基本面分析

热门文章

  1. 用按钮控制游戏物件的开启及关闭
  2. 牛客网知识点总结(二
  3. thymeleaf 学习笔记-基础篇(中文教程)
  4. 3DMax的OFusion插件的使用问题
  5. cocos2d-x编程之CCScale9Sprite典型用法
  6. hadoop上lzop的安装
  7. 利用shell脚本监控网站状态
  8. (转载)用oracle触发器对记录表增加记录的问题
  9. linux编译安装的好处,Linux学习—源码安装
  10. python做一个窗口样式_[Python自学] PyQT5-窗口风格、窗口样式