我是如何向老婆解释MapReduce的?

2013/04/19 · 开发 · 2 评论 · Big Data, MapReduce

分享到:

本文由 伯乐在线 - 伯乐在线读者 翻译。未经许可,禁止转载!
英文出处:Shekhar Gulati。欢迎加入翻译组。

昨天,我在Xebia印度办公室发表了一个关于MapReduce的演说。演说进行得很顺利,听众们都能够理解MapReduce的概念(根据他们的反馈)。我成功地向技术听众们(主要是Java程序员,一些Flex程序员和少数的测试人员)解释了MapReduce的概念,这让我感到兴奋。在所有辛勤的工作之后,我们在Xebia印度办公室享用了丰盛的晚餐,然后我径直回了家。

回家后,我的妻子(Supriya)问道:“你的会开得怎么样?”我说还不错。 接着她又问我会议是的内容是什么(她不是从事软件或编程领域的工作的)。我告诉她说MapReduce。“Mapduce,那是什么玩意儿?”她问道: “跟地形图有关吗?”我说不,不是的,它和地形图一点关系也没有。“那么,它到底是什么玩意儿?”妻子问道。 “唔…让我们去Dominos(披萨连锁)吧,我会在餐桌上跟你好好解释。” 妻子说:“好的。” 然后我们就去了披萨店。

我们在Domions点餐之后,柜台的小伙子告诉我们说披萨需要15分钟才能准备好。于是,我问妻子:“你真的想要弄懂什么是MapReduce?” 她很坚定的回答说“是的”。 因此我问道:

我: 你是如何准备洋葱辣椒酱的?(以下并非准确食谱,请勿在家尝试)

妻子: 我会取一个洋葱,把它切碎,然后拌入盐和水,最后放进混合研磨机里研磨。这样就能得到洋葱辣椒酱了。

妻子: 但这和MapReduce有什么关系?

我: 你等一下。让我来编一个完整的情节,这样你肯定可以在15分钟内弄懂MapReduce.

妻子: 好吧。

我:现在,假设你想用薄荷、洋葱、番茄、辣椒、大蒜弄一瓶混合辣椒酱。你会怎么做呢?

妻子: 我会取薄荷叶一撮,洋葱一个,番茄一个,辣椒一根,大蒜一根,切碎后加入适量的盐和水,再放入混合研磨机里研磨,这样你就可以得到一瓶混合辣椒酱了。

我: 没错,让我们把MapReduce的概念应用到食谱上。Map和Reduce其实是两种操作,我来给你详细讲解下。

Map(映射): 把洋葱、番茄、辣椒和大蒜切碎,是各自作用在这些物体上的一个Map操作。所以你给Map一个洋葱,Map就会把洋葱切碎。 同样的,你把辣椒,大蒜和番茄一一地拿给Map,你也会得到各种碎块。 所以,当你在切像洋葱这样的蔬菜时,你执行就是一个Map操作。 Map操作适用于每一种蔬菜,它会相应地生产出一种或多种碎块,在我们的例子中生产的是蔬菜块。在Map操作中可能会出现有个洋葱坏掉了的情况,你只要把坏洋葱丢了就行了。所以,如果出现坏洋葱了,Map操作就会过滤掉坏洋葱而不会生产出任何的坏洋葱块。

Reduce(化简):在这一阶段,你将各种蔬菜碎都放入研磨机里进行研磨,你就可以得到一瓶辣椒酱了。这意味要制成一瓶辣椒酱,你得研磨所有的原料。因此,研磨机通常将map操作的蔬菜碎聚集在了一起。

妻子: 所以,这就是MapReduce?

我: 你可以说是,也可以说不是。 其实这只是MapReduce的一部分,MapReduce的强大在于分布式计算。

妻子: 分布式计算? 那是什么?请给我解释下吧。

我: 没问题。

我: 假设你参加了一个辣椒酱比赛并且你的食谱赢得了最佳辣椒酱奖。得奖之后,辣椒酱食谱大受欢迎,于是你想要开始出售自制品牌的辣椒酱。假设你每天需要生产10000瓶辣椒酱,你会怎么办呢?

妻子: 我会找一个能为我大量提供原料的供应商。

我:是的..就是那样的。那你能否独自完成制作呢?也就是说,独自将原料都切碎? 仅仅一部研磨机又是否能满足需要?而且现在,我们还需要供应不同种类的辣椒酱,像洋葱辣椒酱、青椒辣椒酱、番茄辣椒酱等等。

妻子: 当然不能了,我会雇佣更多的工人来切蔬菜。我还需要更多的研磨机,这样我就可以更快地生产辣椒酱了。

我:没错,所以现在你就不得不分配工作了,你将需要几个人一起切蔬菜。每个人都要处理满满一袋的蔬菜,而每一个人都相当于在执行一个简单的Map操作。每一个人都将不断的从袋子里拿出蔬菜来,并且每次只对一种蔬菜进行处理,也就是将它们切碎,直到袋子空了为止。

这样,当所有的工人都切完以后,工作台(每个人工作的地方)上就有了洋葱块、番茄块、和蒜蓉等等。

妻子:但是我怎么会制造出不同种类的番茄酱呢?

我:现在你会看到MapReduce遗漏的阶段 搅拌阶段。MapReduce将所有输出的蔬菜碎都搅拌在了一起,这些蔬菜碎都是在以key为基础的 map操作下产生的。搅拌将自动完成,你可以假设key是一种原料的名字,就像洋葱一样。 所以全部的洋葱keys都会搅拌在一起,并转移到研磨洋葱的研磨器里。这样,你就能得到洋葱辣椒酱了。同样地,所有的番茄也会被转移到标记着番茄的研磨器里,并制造出番茄辣椒酱。

披萨终于做好了,她点点头说她已经弄懂什么是MapReduce了。我只希望下次她听到MapReduce时,能更好的理解我到底在做些什么。

编注:下面这段话是网上其他人用最简短的语言解释MapReduce:

We want to count all the books in the library. You count up shelf #1, I count up shelf #2. That s map. The more people we get, the faster it goes.

我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。

Now we get together and add our individual counts. That s reduce.

现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。

原文:Shekhar Gulati 编译:伯乐在线  黄慧谕

转载于:https://www.cnblogs.com/hlleng/p/9002579.html

转:我是如何向老婆解释MapReduce的?相关推荐

  1. 我是如何向老婆解释MapReduce的?

    本文由  伯乐在线 -  伯乐在线读者 翻译.未经许可,禁止转载! 英文出处: Shekhar Gulati.欢迎加入 翻译组. 昨天,我在Xebia印度办公室发表了一个关于MapReduce的演说. ...

  2. 如何简单解释 MapReduce算法

    原文地址:如何简单解释 MapReduce 算法 在Hackbright做导师期间,我被要求向技术背景有限的学生解释MapReduce算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ...

  3. 如何给老婆解释什么是 Master-Slave

    本文公众号来源:柳树的絮叨叨  作者:靠发型吃饭的柳树 这个作者我在知乎关注很久啦,之前看他的Spring系列.给老婆解释什么是RESTful,十分有趣!这篇文章是他新发表的,我看了觉得非常不错,给大 ...

  4. 向你老婆解释清楚什么是MapReduce

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 干巴巴的定义 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)" ...

  5. 如何给老婆解释什么是Restful

    本文发布于专栏Effective Java,如果您觉得看完之后对你有所帮助,欢迎订阅本专栏,也欢迎您将本专栏分享给您身边的工程师同学. 老婆经常喜欢翻看我订阅的技术杂志,她总能从她的视角提出很多有趣的 ...

  6. 如何给老婆解释什么是微服务?

    程序员有了老婆之后就是累,上次好不容易给她解释了什么是Restful,这不,麻烦又来了- 一个周日的清晨,阳光洒在我的脸上,慢慢把我唤醒.我翻过身,感觉好像少了些什么东西,缓缓地睁开眼睛," ...

  7. 如何给老婆解释什么是微服务?(文末有福利)

    戳蓝字"CSDN云计算"关注我们哦! 程序员有了老婆之后就是累,上次好不容易给她解释了什么是Restful,这不,麻烦又来了- 一个周日的清晨,阳光洒在我的脸上,慢慢把我唤醒.我翻 ...

  8. 简单解释 MapReduce 算法

    一个有趣的例子 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座的所有玩家中分配这摞牌 让每个玩家数自己手中的牌有几张是黑桃,然后把这 ...

  9. .metadata是什么项目文件_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?

    前言 本章我们主要从以下几个方面夯实我们的基础: 微框架 Spring Boot 的基本认识 实战学习 Spring Boot 的基本使用 多种方式获取 Spring Boot 配置 如何自定义一个 ...

最新文章

  1. 毫米波雷达的市场格局及后续发展趋势
  2. 第3节 sqoop:3、sqoop的入门测试使用
  3. underscore:get elements counts of a array
  4. stm32-USART1重映射
  5. padding 不占宽高_不占地方的复式楼室内电梯,极致微型,节电省力颜值高
  6. C语言学习之通过指针变量调用它所指向的函数
  7. vs添加icon总是变为bitmap_欧赛尔vs勒阿弗尔
  8. 前端系统学习篇之HTML
  9. 基于java mail实现简单的QQ邮箱发送邮件
  10. c语言 万年历编程,用C语言如何编写“万年历”
  11. 【附源码】计算机毕业设计SSM小区宠物管理系统
  12. 单词毕业设计,微信小程序毕设,小程序毕设源码,单词天天斗 (毕业设计/实战小程序学习/微信小程序完整项目)
  13. python操作word.7.19笔记
  14. 携程 最短路径的代价
  15. 程序员土豆原创诗四首回顾
  16. 如何使用NVivo进行定性研究?
  17. 无线安全专题_破解篇03--打造个人字典
  18. ucosiii源码注释
  19. php filter_sanitize_number_int,PHP中的FILTER_SANITIZE_NUMBER_FLOAT常量
  20. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用

热门文章

  1. Java并发编程(5):volatile变量修饰符—意料之外的问题(含代码)
  2. 科研工作者一般怎么找文献?
  3. Oracle编程入门经典 第4章 新9i示例模式
  4. Python IDLE或Python Shell不支持中文编码的解决方案
  5. Matlab注释语句
  6. 《大话数据结构》第9章 排序 9.5 直接插入排序
  7. 大话设计模式(三 复制VS复用)
  8. 读取siftgeo格式文件的matlab程序
  9. 如何为你的回归问题选择最合适的机器学习算法?
  10. SoapUI工具中的用户名和密码如何用net代码实现传入