Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204544
  • 博文数量: 51
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-24 08:05
文章分类

全部博文(51)

文章存档

2015年(3)

2013年(1)

2011年(4)

2010年(8)

2008年(2)

2007年(18)

2006年(15)

我的朋友

分类: 系统运维

2011-04-28 09:21:45

MapReduce是Google提出的一个软件架构,用于大规模数据集的并行运算。概念"Map(映射)"和"Reduce(化简)",和他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。如果这样说还没有明白的话,我们可以更加通俗的认为:Map是将一个大任务拆分为很多个小任务,每个小任务可以交由一个虚拟机来执行完成。Reduce则将每个虚拟机的计算结果进行收集和汇总,提炼出大任务的最终结果。

譬如,我们要搜索“云计算”,你提交之后,大任务就是搜索云计算的相关信息。Map Server负责分发各种小任务:找到翻译云计算这个服务,找出云计算新闻,找到云计算的书籍,找到云计算的博客资料,找出云计算的相关图片等等,将这些小任务交给对应的服务器去执行,而Reduce server则负责将那个服务器的结果进行整合,汇总成一个网页提供给搜索者。

MapReduce的产生,极大的改变了应用程序的设计方式,从过去的通过垂直扩展来处理大型工作负载(增加CPU,增加内存,增加磁盘等),迁移到现在的水平扩展方式,而水平扩展方式,则严重依赖于MapReduce的算法实现。

数据库管理系统:“Sharding”可以使多个数据库软件实例,在云环境中扩展性能,应用程序不是访问单个数据库,而是访问多个数据库实例中的一个,具体取决于哪个“Shard”。

CPU 密集型处理:执行像帧渲染 (Frame Rendering) 这样的活动的应用程序已经设计为不是为每个帧创建一个新线程,而是创建一个单独的虚拟机来渲染每个帧,因而通过水平扩展来提高性能。

数据密集型处理:开放源社区正在开发一般化工具,这些工具可帮助处理大量数据,然后将结聚集到相应的进程中。例如,Hadoop 就是 MapReduce 问题的一种开放源实这种实现将“工人”(Worker) 虚拟机与他们所需的数据的部署集合在一起。

高性能计算:通过任务分解,每个虚拟机执行一个计算单元,然后通过Reduce虚拟机对计算结果进行汇总。如寻找外星人的那个软件,每个客户端都可以认为是一个虚拟机,计算结果提交的服务器就可以认为是Reduce虚拟机。

Python 提供了map() 和 reduce() 函数, 是否能悟出些什么 :)
zip(list1, list2)”是把一对序列变成元素对序列的便捷方式
>>> seq = range(8)
>>> def square(x): return x*x
...
>>> zip(seq, map(square, seq))
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49)]
reduce(func, sequence)" 返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数,再以返回值和第三个参数调用,依次执行下去。
>>> def add(x,y): return x+y
...
>>> reduce(add, range(1, 11))
55
阅读(1798) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~