MapReduce是一种简化并行计算的编程模型,降低开发并行应用的入门门槛。
1、MapReduce要解决什么问题:
MapReduce是一种编程模式:
一种云计算的核心计算模式
一种分布式运算技术
简化的分布式编程模式
MapReduce主要用于处理并行计算大规模海量数据:
分布gre
分布排序
Web连接图反转
每台机器的词矢量
Web访问日志分析
反向索引建构
文档聚类
机器学习
基于统计的机器翻译
MapReduce实现以后,被用来重新生成Google的整个索引,并取代老的adhoc程序去更新索引。
MapReduce会生成大量临时文件,为了提高效率,它利用分布式文件管理系统来管理和访问这些文件。
2、MapReduce理论基础
MapReduce源于这个模型中的两项核心操作:Map和Reduce。
概括来说,
Map负责把任务分解成多个任务,
Reduce负责把分解后的多任务处理的结果汇总起来。
至于并行编程中的其他复杂问题,如分布式存储、工作调度、负载均衡、容错处理、网络通信等,
由MapReduce框架负责处理,而程序员不用关心这些。
MapReduce模式的主要思想是将要自动分割执行的问题拆成Map(映射)和Reduce(化简)的方式。
数据被分割后通过Map函数的程序将数据映射成不同的区块,分配给计算机集群处理达到分布式运算的效果,
再通过Reduce函数的程序将结果汇总,从而输出开发者需要的结果。
MapReduce考虑了局部性原理,将问题分而治之。
MapReduce集群由普通PC构成,无共享式架构。
在处理前将数据集分布至各个节点。
处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort)
后再分发(reduce节点),从而避免了大量数据的传输,提高了处理效率。
无共享式架构的另一个好处是配合复制(replication)类略,集群可以具有良好的容错性,
一部分节点的宕机对集群的正常工作不会造成影响。
列表处理
映射Mapping 数据列表(Lists)
Reducing 数据列表(Lists)
分布和可靠性
3、MapReduce的编程模式
Map和Reduce的两个概念的主要思想都是从函数式和矢量编程语言借鉴过来的。
MapReduce实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对;
指定一个Reduce(化简)函数,用来保证所有映射键值对中的每一个共享相同的键组。
认识键和值
Mapper和Reducer是如何工作的