很多时候,定义清楚问题比解决问题更难。

什么是MapReduce?

它不是一个产品,而是一种解决问题的思路,它有多个工程实现,Google在论文中也给出了它自己的工程架构实现。

MapReduce这个编程模型解决什么问题?

能够用分治法解决的问题,例如:

  • 网页抓取

  • 日志处理

  • 索引倒排

  • 查询请求汇总

画外音:能够发现,现实中有许多基于分治的应用需求。

为什么是Google,发明了这个模型?

Google网页抓取,分析,倒排的多个应用场景,当时的技术体系,解决不了Google大数据量高并发量的需求,Google被迫进行技术创新,思考出了这个模型。

画外音:谁痛谁想办法。

为什么MapReduce对“能够用分治法解决的问题”特别有效?

分治法,是将一个大规模的问题,分解成多个小规模的问题(分),多个小规模问题解决,再统筹小问题的解(合),就能够解决大规模的问题。

分治法详见《分治法与减治法

Google MapReduce为什么能够成功?

Google为了方便用户使用系统,提供给了用户很少的接口,去解决复杂的问题。
(1) Map函数接口:处理一个基于key/value(后简称kv)的成对(pair)数据集合,同时也输出基于kv的数据集合;
(2) Reduce函数接口:用来合并Map输出的kv数据集合;

画外音:MapReduce系统架构,能在大规模普通PC集群上实现并行处理,和GFS等典型的互联网架构类似。

用户仅仅关注少量接口,不用关心并行、容错、数据分布、负载均衡等细节,又能够解决很多实际的问题,还有这等好事!

能不能举一个例子,说明下MapReduce的Map函数与Reduce函数是如何解决实际问题的?

举例:假设要统计大量文档中单词出现的个数。

Map

输入KV:pair(文档名称,文档内容)

输出KV:pair(单词,1)

画外音:一个单词出现一次,就输出一个1。

Reduce

输入KV:pair(单词,1)

输入KV:pair(单词,总计数)

以下是一段伪代码,
Map(list<pair($doc_name, $doc_content)>){

foreach(pair in list)

foreach($word in $doc_content)

echo pair($word, 1); // 输出list<k,v>

}

画外音:如果有多个Map进程,输入可以是一个pair,不是一个list。

Reduce(list<pair($word, $count)>){// 大量(单词,1)

map<string,int> result;

foreach(pair in list)

result[$word] += $count;

foreach($keyin result)

echo pair($key, result[$key]); // 输出list<k,v>

}

画外音:即使有多个Reduce进程,输入也是list<pair>,因为它的输入是Map的输出。

最早在单机的体系下计算,输入数据量巨大的时候,处理很慢。如何能够在短时间内完成处理,很容易想到的思路是,将这些计算分布在成百上千的主机上,但此时,会遇到各种复杂的问题,例如:

  • 并行计算

  • 数据分发

  • 错误处理

  • 集群通讯

这些综合到一起,就成为了一个困难的问题,这也是Google MapReduce工程架构要解决的问题

内容来源: 58沈剑 架构师之路

Google MapReduce到底解决什么问题?的更多相关文章

  1. 谷歌三大核心技术(二)Google MapReduce中文版

    谷歌三大核心技术(二)Google MapReduce中文版  Google MapReduce中文版     译者: alex   摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据 ...

  2. 【转】谷歌三大核心技术(二)Google MapReduce中文版

      Google MapReduce中文版     译者: alex   摘要 MapReduce 是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一个Map函数处理一个 ...

  3. Google MapReduce中文版

    英文原文链接: Google Map Reduce 译文原文链接: Google MapReduce中文版 Google MapReduce中文版 译者: alex 摘要 MapReduce是一个编程 ...

  4. IE内嵌google chrome frame解决浏览器兼容问题

    IE内嵌google chrome frame解决浏览器兼容问题  http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参 ...

  5. 一分钟理解 HTTPS 到底解决了什么问题

    本文原作者“虞大胆的叽叽喳喳”,原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说这就足够了: 但对于 ...

  6. 访问google的若干解决办法

    据悉,海外谷歌持续被屏蔽,所有海外服务均无法访问,也无法使用google搜索,之前DNS域名污染系统攻击造成google本身故障的假象,但是现在,谷歌服务器IP的屏蔽以及443端口的屏蔽,大陆用户将无 ...

  7. [转]Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法

    问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository ...

  8. Google MapReduce/GFS/BigTable三大技术的论文中译版

    今天查找分布式计算的有关资料,发现Google的三大核心技术MapReduce.GFS和BigTable的论文都已经被翻译成高质量的中文,更巧的是,这三篇中译版的原发地都是CSDN的Blog.其中最新 ...

  9. Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法

    问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository ...

随机推荐

  1. CSS中常见的长度单位

    原文地址:https://segmentfault.com/a/1190000008934791?utm_source=tuicool&utm_medium=referral px - 像素 ...

  2. ios中xml和html解析(封装)

    下载地址  http://pan.baidu.com/share/link?shareid=2902188921&uk=923776187 GDataXML和TFHpple配置是一样的(配置方 ...

  3. ios中自定义图层的2种方法

    1:自定义图层,在图层中画图 #import <QuartzCore/QuartzCore.h> @interface MJLayer : CALayer @end #import &qu ...

  4. web安全之渗透测试

    本次渗透测试使用工具列表如下: 漏洞扫描器 (主机/Web) 绿盟RAS漏洞扫描器 商用 端口扫描器 NMAP 开源 网络抓包 Fiddler 开源 暴力破解工具 Hydra 开源 数据库注入工具 S ...

  5. java struts2入门学习实例--使用struts2快速实现多个文件上传

    一.错误提示信息配置 昨天说到更改默认错误配置信息,我测试很多遍,一直都不对.下面贴出来,待以后有好方法了再补充吧. 首先新建一个properties文件,这里命名为testupload.proper ...

  6. 树莓派进阶之路 (028) - 树莓派SQLite3的安装

    MySQL占用内存太大,而SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景 ...

  7. 10个很棒的学习Android 开发的网站

    1. Android Developers 作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会. 2. Android Gui ...

  8. 【Windows】DOS的常用命令

    cmd[[{/c|/k}][/s][/q][/d][{/a|/u}][/t:fg][/e:{on|off}][/f:{on|off}][/v:{on|off}]string] 参数 /c 执行stri ...

  9. 【jsp】jsp中的动作元素

    一,动作元素(Action):预定义的java代码.目的在于代码的可重用性. 1,为请求阶段提供信息,允许在页面之间转移控制权.  2,JSP2.0规范定义了标准动作,标准动作是一些标签,影响JSP运 ...

  10. 【Linux】数据流重导向(后篇)

    1)/dev/null 垃圾桶黑洞装置与特殊写法 想象一下,如果我知道错误信息会发生,所以要将错误信息忽略掉而不显示或储存呢? 这个时候黑洞装置 /dev/null 就很重要了!这个 /dev/nul ...