今年,云计算炒得火热,《程序员》杂志11月更以云计算为专题,综合了从不同概念,不同厂商的方案,不同的技术大牛的分析和预测,收益良多。让人一种山雨欲来风满楼的感觉。
作为一个程序员,多少了解一些,也算跟得上时代,呵呵。
其中Google的MapReduce技术更是一个亮点。但《程序员》及网上的中文文章介绍以概念性居多,看完之后感觉大致了解,但又还是有些云里雾里的。不如直接看官方文档。
看过Google工程师Dean,Jeff and Ghemawat,Sanjay.的论文MapReduce: Simplified Data Processing on Large Clusters, http://labs.google.com/papers/mapreduce-osdi04.pdf, 踩在云中的双脚算是稍微落地了,之前一直好奇的几个技术细节终于有了答案。
以下是我初识 MapReduce 的认识:
用个例子来说比较直观:对100个网页的内容,统计出现的每个word的频率。
1. MapReduce是一个大规模数据(large scale data set),平行计算(paralle computation)的技术方案;
2. MapReduce 的基本运行环境是成百上千台普通的PC机组成的集群,每台PC机运行Linux系统,MapReduce 控制集群各节点进行数据存储,和逻辑计算。 存储和计算是MapReduce集群两大核心功能。
3. MapReduce基本架构 Master-Slave 模型, Master负责任务(Task) 和 数据和运算的切分,和分发,分发到集群的各节点上; Slave 在这里叫 Worker,负责执行Master分发的任务;
Master还需负责Worker死亡监测 和 容错 (Fault Tolerant)等总控性工作。
[img]http://code.google.com/intl/zh-CN/edu/parallel/img/mrfigure.png" alt="[/img]
4 Map Reduce 的运算过程是先分后合。
Map 意思直译为映射,不过理解为“分治”更容易懂。就是将数据和运算进行切分,并分发到集群节点上;
Reduce (本意是减少,所以初看名称时一直不理解减少为合意), 这里应该理解为该词的另一个意思,“归并”, 就是将分开执行的众多计算任务和数据进行合并,形成最终的输出结果。
5. 程序员基于MapReduce进行开发很easy。
Google MapReduce 提供了一个编程模型和环境(C++),允许程序员只通过少量代码,就可以实现大数据的计算,程序员只需关心自定义的 Map Function 和 Reduce Function。字定义的Map函数在众多Worker上执行原子任务, Reduce函数在部分Worker上合并相关 Map Worker上的中间结果,最终形成最终输出结果,一般为一个输出文件(Output file)。
细节方面:
6. 任务切分 (Partition) 和分发(Distribution)。 以前面举的100网页word词频统计为例,按 M=100个Task进行切分,每台Worker PC 负责统计一个URL网页的词频; 合并(Reduce) Worker数R 由用户指定。
如何分发任务(Distribute Task)? Map任务分发,按url哈希码决定分发到那个机器:hash(url) mod M ; Reduce 任务分发,同理 hash(url) mod R。
7. Map 函数伪代码(代码来源于 google的该篇论文 ), 负责一篇文章的词频统计,
map(String key, String value):
// key: document name
// value: document contents
for each word w in value:
EmitIntermediate(w, "1");
Reduce 函数伪代码,合并多篇文章的中间统计结果
reduce(String key, Iterator values):
// key: a word
// values: a list of counts
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
8 容错。 Google的说法是,集群容易出现某台PC死掉或硬盘坏掉的情况,MapReduce采用了自动容错机制。原理是重复执行 Re-excution, Master通过 ping 周期性监测机器的监控情况,发现不可用时,就将原先分配给他的任务转发给其他节点执行。
9 备份任务(Backup Task). 当MapReduce程序整体快要执行完毕时,对一些task,Master会安排他们的备份版本进行执行,当主任务和备份任务任何一个执行完毕,就表示该Task任务执行完毕,再进行后续工作。 Google说,这样可以避免某些task由于网络IO,磁盘IO等原因,执行缓慢,拖延整体进度。 文中举例,在一项测试中,启用备份任务机制,可以提高提前 30% 的时间完成任务。
10 一个典型的Google MapReduce硬件环境:
1800PC机集群,
每台 2GHz Xeon处理器, 4G内存, 160G IDE硬盘, 1000M以太网。
组网: 这些机器被组织为:两层,三向(tree-shaped,不知翻译准不准,呵呵)交换网络,根节点聚合带宽 100-200 Gbps。
这应该是2004年google的一个MapReduce应用集群配置情况,现在配置估计高一些。但对我们来说是不是也不难组织? 几台PC机还是可以搞掂的,呵呵。感兴趣的朋友也可以搞一个来玩玩。
11. 另外google有一个Cluster管理系统,来管理集群的机器,安装软件客户端,不过这篇论文没有怎么提及。还得再了解......
参考资料:
Jeffrey Dean and Sanjay Ghemawat. MapReduce: Simplified Data Processing on Large Clusters 2004
分享到:
相关推荐
【初识HBase】 HBase,全称Hadoop Database,是一种构建在Hadoop文件系统(HDFS)之上的分布式列式存储系统。它源于Google的Bigtable论文,旨在解决大数据量场景下的数据存储和检索问题。HBase不同于传统的关系型...
### 初识Hadoop知识点详解 #### 一、大数据概览 **1. 大数据定义** - **概念解析**:大数据的概念并非特指某个具体的数据量级,而是指那些无法用传统的数据处理工具进行有效捕捉、管理和处理的数据集合。这种...
- **2006年**:在Google发布的关于GFS和MapReduce的研究报告启发下,他们开始着手创建Hadoop项目,目的是为了提供一个低成本的解决方案来构建大规模的数据处理算法。 #### 四、Hadoop的技术架构 1. **HDFS...
Hadoop的核心思想源于Google的两篇论文——“GFS”(Google File System)和“MapReduce”。它由两个主要组件构成:HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了一个高容错、高吞吐量的数据存储...
Hadoop基于Google的GFS(Google File System)和MapReduce编程模型,设计用于处理和存储大规模数据。它强调数据的分布式存储和并行处理,使得在普通硬件上处理PB级别的数据成为可能。 "第2讲:Hadoop安装和配置...
- Hadoop发展始于Google的MapReduce和GFS论文,后来由Apache基金会发展为一个完整的生态系统,包括MapReduce、HDFS和其他相关项目如Hive、Pig和HBase等。 - Hadoop与传统系统相比,具有高容错性、可扩展性和成本...
它基于Google的MapReduce计算模型和GFS(Google文件系统)的理念,为海量数据的处理提供了高效、可靠的解决方案。HADOOP的设计目标是实现容错性、高扩展性和高吞吐量,使得即使是复杂的分析任务也能在普通硬件集群上...
Hadoop的设计灵感来源于Google的GFS和MapReduce论文,旨在解决大规模数据集的存储和处理问题。 1.1 数据!数据! 随着互联网的发展,数据量呈指数级增长。Hadoop就是为了应对这种爆炸性的数据增长而生,它能处理PB...
- **Hadoop发展历史**:从Google的MapReduce和GFS论文出发,Hadoop逐渐发展为开源社区的核心项目,为大数据处理提供解决方案。 - **Apache Hadoop项目**:包括Hadoop Distributed File System(HDFS)和MapReduce...
- Hadoop的发展历程始于2005年,基于Google的MapReduce和GFS论文,现在已成为Apache软件基金会的核心项目之一。 2. **MapReduce简介** - MapReduce是Hadoop中的核心计算模型,通过将大任务分解为Map和Reduce阶段...
Hadoop的设计是基于Google的BigTable和GFS(Google File System)的分布式计算模型。Hadoop采用了主从架构(Master/Slave Architecture),主要组件包括HDFS(Hadoop Distributed File System)和MapReduce编程模型...
2.2.2 初识Thrift 33 2.3 小结 34 第3章 NoSQL接口与交互 36 3.1 没了SQL还剩什么 36 3.1.1 存储和访问数据 37 3.1.2 MongoDB数据存储与访问 37 3.1.3 MongoDB数据查询 41 3.1.4 Redis数据存储与访问 43 ...