MapReduce :Simpliyed Data Processing on Large Clusters 总结
来源:互联网 发布:多普达t5399软件 编辑:程序博客网 时间:2024/05/16 15:27
MapReduce:Simpliyed Data Processing on Large Clusters
(超大集群的简单数据处理)
*一.背景
1. 问题的提出
面对海量数据,如何处理并行计算、如何分发数据、如何处理错误等问题引发关注,而原本简单的计算处理由于这些问题的存在变得复杂,是否能找到一种方法来解决这个问题?
2. MapReduce的出现
为了解决上述问题,需要设计新的计算抽象模型:只要表述想要执行的运算,而屏蔽了并行计算、容错、数据分发、负载均衡等复杂细节,这些被封装在一个库里。于是,MapReduce框架模型应运而生了。
*二.编程模式
1.MapReduce编程模式
MapReduce是一个编程模式,它是与处理/产生海量数据集的实现相关。它的设计灵感来自于函数式语言的Map和Reduce原语。
Map:对输入数据应用Map操作得出一个中间<key, value>对集合。
Reduce:对具有相同key的value集合上应用Reduce操作合并中间结果。
2.实现的目标
通过简单接口(用户只要实现Map和Reduce函数)实现大规模数据的分布式计算,实现在大量普通机器上的高性能计算。
3.例子
计算一个大文档集合中每个单词的出现次数。伪代码:
map(String key, String value): // key:document name
for each word w in value: // value:document contents
EmitIntermediate(w,"1");
reduce(String key, Iterator values): //key: a word
int result = 0; // values: a list of counts
for each v in values:
result +=ParseInt(v);
Emit(AsString(result));
map函数输出文档每个词(key)这个词的出现次数(value,这里为1)。
reduce函数将每个词的出现次数累加起来输出。
*三.实现
1.实现方式
MapReduce模型有多种不同实现方式,取决于具体环境,如小型的共享内存机器、大型网络连接集群等。
2.执行阶段概括
1)Map阶段:输入数据自动分割为M个片段集合,Map调用后分到多台机器上并行处理。
2)Reduce阶段:使用分区函数将Map输出的key值分成R个分区(如hash(key)mod R),使得Reduce调用也被分到多台机器并行处理。这里分区数R和分区函数作为一个重要指标,由用户来指定。
3.具体实现步骤
1)用户调用MapReduce库将输入文件分为M个数据片段,从性能方面考虑一般M的大小为16-64M。2)用户程序有一个Master(主控程序),其他都为Worker,由Master负责任务分配。
3)被分配了Map任务的Map Worker读取数据片段,将其解析出<key, value>对传递给用户map函数处理,最后输出中间<key,value>对到内存的缓冲区。
4)缓存的<key, value>对通过分区函数分成R个分区,周期性写入本地磁盘,并将位置信息上传给Master。Master再将这些存储位置传给Reduce Worker。
5)ReduceWorker接收到信息后,使用RPC将落地的<key,value>对读取到本地,对Key排序后聚合相同Key值的数据,然后将<key, list<value>>对传递给用户reduce函数处理,最后输出到所属分区的输出文件(故最终的MapReduce输出为R个文件)。
*四.性能
1.性能的衡量
在一个大型集群上运行的两个计算衡量MapReduce的性能。一个计算用来在一个大概1TB的数据中查找特定的匹配串。另一个计算排序大概1TB的数据,之所以使用这两个计算是因为这两个程序代表了很多的用MapReduce实现真实的程序的主要类型。
2.结果
由测试的数据可反映如下情况:
1)输入速度比输出速度快。因为本地化的优化策略,绝大部分数据都是从本地硬盘读取而省去了相关的网络消耗。
2)排序速度比输出速度快。因为输出阶段写了两份排序后的速度(写两份的原因是为了可靠性和可用性的原因)。
*五.经验
1.MapReduce库能广泛应用于我们日常工作遇到的各类问题,在各个领域应用广泛,如数据挖掘,大规模机器学习、网页信息提取、大规模图形计算等。
2.MapReduce的成功取决于快速写出一个简单的程序,就能在上千台机器的集群上做大规模并发处理,极大加快了设计和开发周期;而且完全可以让没有分布式/并行处理开发经验的程序员利用大量资源,开发出分布式/并行处理的应用。
3.MapReduce最成功的应用就是重写了Google搜索服务所使用的Index系统(大规模索引),使用MapReduce带来了代码简单小巧、高性能、操作管理更简单的优点。
- MapReduce :Simpliyed Data Processing on Large Clusters 总结
- MapReduce: Simplified Data Processing on Large Clusters
- MapReduce:Simplified Data Processing On Large Clusters
- MapReduce: Simplified Data Processing on Large Clusters
- MapReduce: Simplified Data Processing on Large Clusters
- MapReduce: Simplified Data Processing on Large Clusters
- Google MapReduce:Simpli ed Data Processing on Large Clusters
- MapReduce: Simplified Data Processing on Large Clusters(转并改)
- 论文阅读笔记 - MapReduce : Simplified Data Processing on Large Clusters
- MapReduce: Simplified Data Processing on Large Clusters 中文翻译 1
- MapReduce: Simplified Data Processing on Large Clusters 中文翻译 2
- MapReduce: Simplified Data Processing on Large Clusters 中文翻译 3
- MapReduce: Simplified Data Processing on Large Clusters 中文翻译 4
- MapReduce: Simplified Data Processing on Large Clusters 论文笔记
- [翻译]MapReduce: Simplified Data Processing on Large Clusters
- Simplified Data Processing On Large Clusters
- Google分布式系统三大论文(三)MapReduce: Simplified Data Processing on Large Clusters
- 《MapReduce: Simplified Data Processing on Large Cluster 》论文翻译
- 图片处理系列二Android瀑布流照片墙实现(含源码)
- 倒排索引
- Linux 下几个文件操作命令的代码实现,myfind find 查找命令 实现
- 企业IT规划
- 字符串的全排列和组合算法
- MapReduce :Simpliyed Data Processing on Large Clusters 总结
- 光照归一化算法——DoG滤波,自商图
- mapreduce调试查询System.out的结果
- J2EE Exception:WELD-001408 Unsatisfied dependencies for type [SelectModelFactory] with qualifiers [@
- [go]基于协程的并发ping(2)
- 巧用WINRAR和DOS命令处理压缩数据
- 将手绘地图或自制地图显示在网页上(利用百度API)
- div+css解决图片垂直居中问题
- title && tile