第二篇,Google MapReduce架构启示(上)。

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

什么是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工程架构要解决的问题,也就是下一章将要分享的问题,敬请期待。

Google MapReduce到底解决什么问题?相关推荐

  1. Google BigTable到底解决什么问题?

    搞架构的人,Google的论文是必看的,但好像大家都不愿意去啃英文论文.故把自己的读书笔记,加入自己的思考,分享给大家. 第三部分,Google BigTable. BigTable,很多人对它耳熟能 ...

  2. Google MapReduce架构设计

    前情回顾 Google MapReduce到底解决什么问题? Google MapReduce是Google产出的一个编程模型,同时Google也给出架构实现,它能够解决"能用分治法解决的问 ...

  3. Google MapReduce有啥巧妙优化?

    搞架构的人,Google的架构论文是必看的,但好像大家都不愿意去啃英文论文.故把自己的读书笔记,加入自己的思考,分享给大家. <MapReduce到底解决什么问题?>做了简介,这是第二篇, ...

  4. Google MapReduce

    摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一个Map函数处理一个基于 key/value pair的数据集合,输出中间的基于key/valu ...

  5. 三篇论文之Google MapReduce中文版

    译者: alex   摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一个Map函数处理一个基于key/value pair的数据集合,输出中间的 ...

  6. 【思考】Docker到底解决了什么问题

    本文讲的是[思考]Docker到底解决了什么问题, [编者的话]作者之前是一位B2B行业的从业者,他从自己的角度出发,分析了Docker能够解决的问题.作者认为目前的B2B市场体量还是太小,但是随着D ...

  7. Google MapReduce论文中文版

    摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一个Map函数处理一个基于 key/value pair的数据集合,输出中间的基于key/valu ...

  8. Google MapReduce中文版

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

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

    IE内嵌google chrome frame解决浏览器兼容问题 参考文章: (1)IE内嵌google chrome frame解决浏览器兼容问题 (2)https://www.cnblogs.co ...

最新文章

  1. 人工智能在牙科医疗领域是一片蓝海
  2. 大学生计算机等级考试c 语言程序设计,计算机等级考试c语言程序设计习题大学论文.doc...
  3. 基于java的社交网站毕业设计_软件工程毕业设计_社交网站.pdf
  4. 深度学习中各激活函数的优缺点
  5. spring框架中@PostConstruct的实现原理
  6. python制作聊天机器人原理_用 Python 来做一个聊天机器人吧!(一)
  7. Degree Sequence of Graph G【模拟】
  8. 只提取单元格中的数字_提取Excel单元格中的数字(4类)及原理
  9. 【操作系统】分页内存管理
  10. 自动泊车算法中混合A*粗路径的MATLAB实现
  11. 公众号支付相关需要注意的问题
  12. pytest与unittest区别
  13. android 基带版本,手机基带是什么?手机的基带版本是什么意思?
  14. 达梦数据库(DM8)的安装教程
  15. java 计算行驶里程,js根据经纬度换算行驶里程
  16. Power BI与Tableau的对比与选择
  17. 7-1 验证哥德巴赫猜想
  18. 清除node_modules 缓存
  19. 阿里P8架构师深度概述分布式架构
  20. npm install的解决方法试错,还没解决。

热门文章

  1. Java Bean与Map之间相互转化的实现
  2. Solr7 安装部署 管理界面介绍
  3. oracle 修改表
  4. Zabbix-Proxy-agent实现web监控
  5. phpMyAdmin下载、安装和使用入门
  6. 前端模块化开发中webpack、npm、node、nodejs之间的关系[小白总结]
  7. [虚拟机] VMware 15 + CentOS 7.7/8.0在主机和客户机之间拷贝文件失败的解决办法
  8. opengl库中gl glu glut glaux的区别
  9. 智能老旧模糊照片修复——C++实现GFPGAN模型推理
  10. python dlib学习(一):人脸检测