本文由  伯乐在线 -  伯乐在线读者 翻译。未经许可,禁止转载!
英文出处: 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   编译:伯乐在线 – 黄慧谕

转载自:http://blog.jobbole.com/1321/

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

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

    我是如何向老婆解释MapReduce的? 2013/04/19 · 开发 · 2 评论 · Big Data, 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. 文件和参数一起上传_Spring boot的文件上传
  2. python0.1+0.2_为什么0.1+0.2=0.30000000000000004
  3. 组合恒等式7 组合变换的互逆公式 简介与简单例子
  4. 现代制造工程02:第二部分——机床、刀具、切削、磨削
  5. linux之scp命令
  6. 大企业中,Java面试官最爱问的问题集锦
  7. delphixe10linux,减小Delphi XE 以上版 编译出来的程序体积
  8. 【冷门】十字链表法图解
  9. php使用gd库合并图片,php使用GD库合并简单图片并变动部分颜色
  10. Django重置管理后台模板
  11. 昆明市计算机专业职称评定,云南省专业技术人员评聘专业技术职务实施计算机职称考试的通知...
  12. SCL教程之如何使用SCL创建简单控制程序
  13. rank函数python_Python pandas.DataFrame.rank函数方法的使用
  14. wow Time Blessing Replacer
  15. 微信开发者工具黑屏/打不开解决办法
  16. ES6中PadStart方法
  17. 三、C++学习笔记——处理数据
  18. matlab中不能找到ccs,搭建matlab连接ccs生成28335代码的环境(路径不在C盘)
  19. ELK日志处理之使用Grok解析日志
  20. Matlab设置天线增益,怎么把天线的增益图画成这个样子

热门文章

  1. 02-React v18创建元素
  2. 用Python获取免费代理IP
  3. CACL联赛第一轮参赛记录
  4. winform 判断鼠标在一段时间内是否移动
  5. Image steganalysis with convolutional vision transformer
  6. 『Flutter开发实战』十分钟入门Dart语言
  7. ImportError: cannot import name '***' from 'pyecharts'
  8. ClickHouse 八(TTL 时效性)
  9. 简单删除 流氓软件强行篡改的默认首页 (如:桔梗导航)
  10. ModStartCMS模块化万能建站系统宝塔版 v3.0.0